Jean-Francois T. Jean-Francois T. - 1 year ago 118
Git Question

Using TortoiseGit with svn-git to clone specific branches of SVN repository

I have a SVN project with following architecture (empty

| +--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
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.
) and specifying the first SVN revision of the branch.

TortoiseGit clone of SVN single branch

I have tried to put the URL
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

Answer Source

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

  1. TortoiseGit clone with only a selection of the trunk (revision 12345 corresponding to the creation of the tunk)

TortoiseGit clone of SVN trunk

  1. .git/config file edited by hand to add the desired branches

The following shall be added in the svn-remote part

[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/*
  1. TortoiseGit SVN fetch to pull out the branches

The last command might take a while because it starts searching from revision 1.

  1. Perform TortoiseGit Switch/Checkout to 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).

Git SVN Rebase

Hope it helps