Using TortoiseGit with svn-git to clone specific branches of SVN repository
I have a SVN project with following architecture (empty
https://svn-repo.com/svn/company +--my_project | +--trunk (empty) | +--branches | | +--my_branch | | +--my_branch2 | | +--temp_branch1 | | +--temp_branch2 | | +--temp_branch3 | +-tags (empty)
I would like to use TortoiseGit to clone this repository into a git repository with branches
my_branch2 and being able to commit changes back to SVN.
I have been able to clone a single branch by not checking any boxes related to Trunk, Tags, Branch and putting the URL to the branch (e.g.
https://svn-repo.com/svn/company/my_project/branches/my_branch) and specifying the first SVN revision of the branch.
I have tried to put the URL
https://svn-repo.com/svn/company/my_project and checking all the boxes but this failed each time.
Question 1: How to clone the SVN repository with all its branches to Git through TortoiseGit?
Question 2: What is the way (if it exists) to only keep certain branches in the Git repository (namely, removing all the branches
I found a bit of if using git-svn CLI (like this related topic) but nothing relevant for TortoiseGit.
Thanks a lot
2 Solutions collect form web for “Using TortoiseGit with svn-git to clone specific branches of SVN repository”
- You can’t do it (in good way) in pure TortoiseGit
- You have to edit
$GIT_DIR/configfile by hand
Git-SVN doc mention some rare cases for Subversion repos and suggest possible solution: enumerating all needed (and only needed) branches
Since some SVN repositories are oddly configured with multiple projects glob expansions such those listed below are allowed:
[svn-remote "project-a"] ... branches = branches/*/project-a:refs/remotes/project-a/branches/* branches = branches/release_*:refs/remotes/project-a/branches/release_* branches = branches/re*se:refs/remotes/project-a/branches/* ...
Question 1 A mix of TortoiseGit + patch of config file (c.f. below)
Question 2 Based on Lazy Barger hints, I came up with the following flow
- TortoiseGit clone with only a selection of the trunk (revision 12345 corresponding to the creation of the tunk)
.git/configfile edited by hand to add the desired branches
The following shall be added in the
[svn-remote "svn"] url = https://myserver:8443/svn/WorkRoot fetch = my_project/trunk:refs/remotes/origin/trunk branches = my_project/branches/my_branch*:refs/remotes/branches/*
SVN fetchto pull out the branches
The last command might take a while because it starts searching from revision 1.
- Perform TortoiseGit
Switch/Checkoutto change the branch
Note: To perform the command equivalent to
svn update, I use
Git SVN Rebase and select the correct upstream corresponding to the remote branch (and not the trunk which is selected by default).
Hope it helps