threads / discuss / 18423

git-svn with multiple branch directories

Subject: git-svn with multiple branch directories

## tl;dr

2 messages between Mar 19, 2009 and Mar 20, 2009.

replies: 1people: 2as markdown or json

Guido Ostkamp· Mar 19, 2009, 23:17 UTC · lore
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· Mar 20, 2009, 10:04 UTC · re: Guido Ostkamp · lore

Re: git-svn with multiple branch directories

Guido Ostkamp <git@ostkamp.fastmail.fm> wrote:
Show 54 quoted lines
> 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)

← back to recent threads