views:

5024

answers:

4

I have a git repository which tracks an svn repository. I cloned it using --stdlayout.

I created a new local branch via git checkout -b foobar

Now I want this branch to end up in …/branches/foobar in the svn repository.

How do I go about that?

(snipped lots of investigative text. see question history if you care)

+28  A: 

as of git v1.6.1, git svn branch is available.

From the git docs:

    branch
        Create a branch in the SVN repository.

        -m, --message
            Allows to specify the commit message.

        -t, --tag
            Create a tag by using the tags_subdir instead of the branches_subdir
            specified during git svn init.

Previous versions of git do not provide a way to create an svn branch.

kch
A: 

So how can you get around the fact that git svn branch does not exist? How do i create a branch using git into the svn repository?

i've been doing either of: compile your own git, or, create the branch via vanilla svn and then git svn fetch.
kch
command now available. see my updated answer.
kch
+1  A: 

@kch I just (7 December 2008) compiled the v1.6.1-rc1 tag of git and it does contain the git svn branch command and the documentation for it. So the v1.6.1 release of git should (hopefully) contain this command.

Bryan
indeed, i installed 1.6.1 now and the command is available. updated my answer accordingly.
kch
+25  A: 

I know this question has been answered a while ago, but after reading it, I it might help adding examples of the specific git svn branch command and relate it to a typical workflow.

Like kch answered, use git svn branch. Here is a full example, (note the -n for dry-run to test):

`git svn branch -n  -m "Branch for authentication bug" auth_bug`. 

If this goes well, server replies with answer like this:

Copying https://scm-server.com/svn/portal/trunk at r8914 to https://scm-server.com/svn/portal/branches/auth_bug...

And without the -n switch the server probably adds something like:

Found possible branch point: https://scm-server.com/svn/portal/trunk => https://scm-server.com/portal/branches/auth_bug, 8914

Found branch parent: (refs/remotes/auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

Following parent with do_switch

Successfully followed parent r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(refs/remotes/auth_bug)

The best part of it, now you can create a local branch based on your remote branch like so:

git checkout -b local/auth_bug auth_bug

Which means "check out and create local branch named auth_bug and make it follow the remote branch (last parameter) auth_bug

Test that your local branch works on that remote branch by using dcommit with --dry-run:

git svn dcommit -n

And SVN server should reply with the new branch name:

Committing to https://scm-server.com/svn/portal/branches/auth_bug ...

Jesper Rønn-Jensen
"git co" doesn't work on my version. I used "git checkout" instead.
Chris Conway
Yeah, git co means that Jesper set up a git alias.
Jason Axelson
updated and replaced `git co` with `git checkout` so that the example can work for anybody
Jesper Rønn-Jensen