How do I tell git-svn about a remote branch created after I fetched the repo?
I'm using git-svn
to work against my company's central Subversion repository. We've recently created a new feature branch in the central repo.
How do I tell Git about it? When I run git branch -r
I can only see the branches that existed when I ran fetch
against the Subversion repo to initialize my Git repo?
Solution 1:
You can manually add the remote branch,
git config --add svn-remote.newbranch.url https://svn/path_to_newbranch/
git config --add svn-remote.newbranch.fetch :refs/remotes/newbranch
git svn fetch newbranch [-r<rev>]
git checkout -b local-newbranch -t newbranch
git svn rebase newbranch
Solution 2:
If you want to track ALL the remote svn branches, then the solution is as simple as:
git svn fetch
This will fetch ALL the remote branches that have not been fetched yet.
Extra tip: if you checked out only the trunk at first, and later you want to track ALL branches, then edit .git/config
to look like this and re-run git svn fetch
:
[svn-remote "svn"]
url = https://svn/path_to_repo_root/
fetch = path_to_trunk:refs/remotes/git-svn
branches = path_to_branches/*:refs/remotes/*
The key points are url
should point to the repository root, and the paths defined in fetch
and branches
should be relative to url
.
If you want to fetch only specific branches instead of ALL, there is a nice example in git svn --help
:
[svn-remote "huge-project"]
url = http://server.org/svn
fetch = trunk/src:refs/remotes/trunk
branches = branches/{red,green}/src:refs/remotes/branches/*
tags = tags/{1.0,2.0}/src:refs/remotes/tags/*
With older versions of git-svn
, once you specified branches like this, you might not be able to get new branches with git svn fetch
. One workaround is adding more fetch
lines, like this:
[svn-remote "huge-project"]
url = http://server.org/svn
fetch = trunk/src:refs/remotes/trunk
fetch = branches/blue:refs/remotes/branches/blue
fetch = branches/yellow:refs/remotes/branches/yellow
branches = branches/{red,green}/src:refs/remotes/branches/*
Another workaround by @AndyEstes: edit .git/svn/.metadata
and change the value of branches-maxRev
or tags-maxRev
to a revision before any newly-specified branches or tags were created. Once you've done this, run git svn fetch
to track the new svn remote branch.