I've created a Git Clone of a SVN repository using git-svn. When doing this I specified the --prefix option to prefix my remote branches. I now want to get rid of this prefix.
Is there a way to update or remove the prefix without re-cloning the repository?
Essentially I did the initial clone using --prefix=Project so I ended up with Project/trunk and Project/feature-branch as my remote tracking branches. What I want is to have the trunk just be called trunk and the feature-branch be called svn/feature-branch.
I've done the following which appears to have worked.
In .git/config I updated the fetch, branches and tags settings to update the local refs. It was:
[svn-remote "svn"]
url = http://subversion/......
fetch = trunk:refs/remotes/Project/trunk
branches = branches/*:refs/remotes/Project/*
tags = tags/*:refs/remotes/Project/tags/*
Which I changed to
[svn-remote "svn"]
url = http://subversion/......
fetch = trunk:refs/remotes/trunk
branches = branches/*:refs/remotes/svn/*
tags = tags/*:refs/remotes/svn/tags/*
The within .git/refs/remotes I moved trunk out of the Project folder and the remaining refs within Project into a new folder called svn. The structure was:
Which I changed to:
I also performed the same restructuring of folders within .git/svn/refs/remotes/.
Finally I triggered a git svn fetch. I had to specify the -r argument to limit to the same start revision that I used for my initial clone, but it doesn't appear to have re-fetched the old revisions.
Note: the current solution might not work anymore with git 2.0+ (April 2014)
See commit fe191fc by Johan Herland (jherland), which highlight the fact you now are supposed to have a prefix (and not have a svn branch without prefix like 'trunk'):
git svn: Set default --prefix='origin/' if --prefix is not givenHaving no prefix by default was problematic:
git-svnby default puts its Subversion-tracking refs directly inrefs/remotes/*.
This runs counter to Git's convention of usingrefs/remotes/$remote/*for storing remote-tracking branches.Furthermore, combining
git-svnwith regular git remotes run the risk of clobbering refs under refs/remotes (e.g. if you have agit remotecalled "tags" with a "v1" branch, it will overlap with the git-svn's tracking branch for the "v1" tag from Subversion.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With