# git-svn with multiple branch directories

2 messages from 2009-03-19 to 2009-03-20. Participants: Guido Ostkamp, Eric Wong.
Thread: https://gitlist.dev/t/18423

## Guido Ostkamp, 2009-03-19 23:17

Subject: git-svn with multiple branch directories
Message-ID: <alpine.LSU.2.01.0903200002390.29898@bianca.dialin.t-online.de>
URL: https://gitlist.dev/e/alpine.LSU.2.01.0903200002390.29898%40bianca.dialin.t-online.de

```
Hello,

I am trying to create a git repo that tracks an SVN repo with multiple 
branch directories.

Is there any way to get this done easily?

It seems the 'git svn' command allows only to specify one 'trunk', 
'branches' and 'tag' directory.

The example usecase is the OpenOffice.org repo (it's just a private 
experiment). I got this svn-sync'ed within 4 evening sessions, the SVN 
size is about ~8 GB with ~270000 commits. Unfortunately their structure is

   branches/
   contrib/
   cws/
   dist/
   patches/
   tags/
   trunk/

where 'cws' and 'branches' both hold branches.

I have seen a web-based article telling one should

   git svn clone <URL>/trunk repo.git

first, and then hack the repo.git/.git/config file manually to add entries 
like

   [svn-remote "b1"]
         url = $SVN_REPO_URL/branches/b1
         fetch = :refs/remotes/b1
   [svn-remote "b2"]
         url = $SVN_REPO_URL/branches/b2
         fetch = :refs/remotes/b2
   [svn-remote "c1"]
         url = $SVN_REPO_URL/cws/c1
         fetch = :refs/remotes/c1
   ...

to later use

   git svn fetch <branchname>

for each branch. But even if that worked, their seems to be no easy way to 
detect newly created branches etc. Additionally, I get two entries listed 
in 'git branch' for each, one of which with extension '@1' (seems to point 
ot the branch point). This doesn't seem to be the case for repo's with 
only one branch directory converted the normal way.

Any ideas?

Best regards

Guido

```

## Eric Wong, 2009-03-20 10:04

Subject: Re: git-svn with multiple branch directories
Message-ID: <20090320100411.GB17287@dcvr.yhbt.net>
URL: https://gitlist.dev/e/20090320100411.GB17287%40dcvr.yhbt.net
In-Reply-To: <alpine.LSU.2.01.0903200002390.29898@bianca.dialin.t-online.de>

```
Guido Ostkamp <git@ostkamp.fastmail.fm> wrote:
> Hello,
>
> I am trying to create a git repo that tracks an SVN repo with multiple  
> branch directories.
>
> Is there any way to get this done easily?
>
> It seems the 'git svn' command allows only to specify one 'trunk',  
> 'branches' and 'tag' directory.
>
> The example usecase is the OpenOffice.org repo (it's just a private  
> experiment). I got this svn-sync'ed within 4 evening sessions, the SVN  
> size is about ~8 GB with ~270000 commits. Unfortunately their structure 
> is
>
>   branches/
>   contrib/
>   cws/
>   dist/
>   patches/
>   tags/
>   trunk/
>
> where 'cws' and 'branches' both hold branches.
>
> I have seen a web-based article telling one should
>
>   git svn clone <URL>/trunk repo.git
>
> first, and then hack the repo.git/.git/config file manually to add 
> entries like
>
>   [svn-remote "b1"]
>         url = $SVN_REPO_URL/branches/b1
>         fetch = :refs/remotes/b1
>   [svn-remote "b2"]
>         url = $SVN_REPO_URL/branches/b2
>         fetch = :refs/remotes/b2
>   [svn-remote "c1"]
>         url = $SVN_REPO_URL/cws/c1
>         fetch = :refs/remotes/c1
>   ...
>
> to later use
>
>   git svn fetch <branchname>
>
> for each branch. But even if that worked, their seems to be no easy way 
> to detect newly created branches etc. Additionally, I get two entries 
> listed in 'git branch' for each, one of which with extension '@1' (seems 
> to point ot the branch point). This doesn't seem to be the case for 
> repo's with only one branch directory converted the normal way.
>
> Any ideas?


You should be able to do something like this:

[svn-remote "svn"]
	url = $SVN_REPO_URL
	branches = branches/*:refs/remotes/branches/*
	tags = tags/*:refs/remotes/tags/*
	fetch = cws/c1:refs/remotes/cws/c1
	fetch = cws/c2:refs/remotes/cws/c2
	fetch = cws/c3:refs/remotes/cws/c3
	...

As for generating the individual fetch lines, I would just pipe
svn ls $SVN_REPO_URL/cws to awk/sed/perl...

-- 
Eric Wong (who just realized he programs in ASP :x)

```
