Subject: git svn: Supporting multiple branch subdirs?

From: Marc Branchaud <[email-masked]>
Date: Fri, 12 Jun 2009 17:46:13 -0400

Hi,

I believe I need git-svn to support multiple branch subdirectories.

The motivation for this is the (partial) gitification of the FreeBSD subversion repository.  FreeBSD doesn't follow the usual branches/tags/trunk pattern.  Instead:

- FreeBSD's /trunk is called /head.

- /head is branched into /stable/X subdirs.

- Each /stable/X branch is sub-branched into /releng/X.Y subirs.

- /releng/X.Y.Z branches are tagged under /release/foo.

I'm only looking to get an updatable mirror of their repo -- I don't (yet) need to push changes back to FreeBSD.

I'd like to modify git-svn to support multiple (at least two) -b parameters, so I could import the FreeBSD repo with something like
	git svn init --trunk=head \
		--branches=stable \
		--branches=releng \
		--tags=release \
		file:///local/mirror/of/svn.freebsd.org/base/
	git svn fetch

Is this approach wise or even feasible?  A couple of possible show-stoppers I see are:

- The releng/X.Y branches are created from the stable/X  tree, where X itself doesn't exist from the start.

- FreeBSD likes to make single commits that spans multiple branches.  This is usually done as a security patch: One commit can, for example, touch /head, /stable/X, /stable/W, and several branches under /releng.

If this isn't completely off the wall, I'd appreciate some pointers on the git-svn.perl code.  I've tried searching through the code to see how the -b parameter is handled, but I got lost pretty quickly.  How does the fetch command deal with branches?

Thanks,

		M.