Search code examples
gitsvngit-svntortoisegit

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


I have a SVN project with following architecture (empty trunk and tags)

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_branch and 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.

TortoiseGit clone of SVN single 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 temp_branchN)?

I found a bit of if using git-svn CLI (like this related topic) but nothing relevant for TortoiseGit.

Thanks a lot


Solution

  • 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