I've started tracking an svn repository with git by cloning only its trunk directory. Now I want to track the other stuff, but I don't want to have to clone it again just to use --stdlayout
since it takes a long time to download and I already have most of the code locally. How do I change the repository layout to match svn trunk/branches/tags scheme without having to clone again?
# Clone a repo with standard SVN directory layout (like git clone): git svn clone http://svn.example.com/project --stdlayout --prefix svn/ # Or, if the repo uses a non-standard directory layout: git svn clone http://svn.example.com/project -T tr -b branch -t tag --prefix svn/ # View all branches and tags you have ...
No interaction between them. Just ignore the . git folder for SVN and the . svn folder for Git and you should be fine.
This retrieves all the changes from the SVN repository and applies them on top of your local commits in your current branch. You can also use git svn fetch to retrieve the changes from the SVN repository but without applying them to your local branch.
Old .git/config
:
[svn-remote "svn"] url = svn://host/project/trunk fetch = :refs/remotes/git-svn
New .git/config
:
[svn-remote "svn"] url = svn://host/project fetch = trunk:refs/remotes/git-svn branches = branches/*:refs/remotes/* tags = tags/*:refs/remotes/tags/*
Now run git svn reset -r1 -p; git svn fetch; git svn rebase
.
No, it's not much different from doing a git svn clone
anew -- adding branches means that git
can see more merges which means the content git
is tracking has changed so git-svn
must regenerate everything.
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