5

While working with git-svn, and a 'typical' svn repo /trunk, /branches/..., /tags/... How do I push a local branch to a new branch inside of /branches ?

1 Answer 1

7

Say we have a skeleton Subversion repository with empty trunk/, branches/, and tags/:

/tmp$ git svn clone -s file:///tmp/svn-repo/ git-svn-repo
Initialized empty Git repository in /tmp/git-svn-repo/.git/
r1 = 80bdcfc0cf248b74b914a1b5f99ab89fb4e31b6c (refs/remotes/trunk)
Checked out HEAD:
  file:///tmp/svn-repo/trunk r1

/tmp$ cd git-svn-repo/

/tmp/git-svn-repo$ git svn branch my-branch
Copying file:///tmp/svn-repo/trunk at r1 to file:///tmp/svn-repo/branches/my-branch...
Found possible branch point: file:///tmp/svn-repo/trunk => file:///tmp/svn-repo/branches/my-branch, 1
Found branch parent: (refs/remotes/my-branch) 80bdcfc0cf248b74b914a1b5f99ab89fb4e31b6c
Following parent with do_switch
Successfully followed parent
r2 = 56150bbd9d3aec94972ff46d030e30ec726595ab (refs/remotes/my-branch)

The explanation below will switch back-and-forth between two views of the same repository, a Subversion working copy of the entire repo (not just trunk) and a git-svn clone. For clarity, each shell prompt's prefix will indicate the current directory.

On the svn side, you'll now see

/tmp/svn-repo-wc$ svn up
A    branches/my-branch
Updated to revision 2.

You'll also see the new branch on the git side:

/tmp/git-svn-repo$ git branch -r
  my-branch
  trunk

To commit to the newly created branch, first switch to it:

/tmp/git-svn-repo$ git reset --hard remotes/my-branch
HEAD is now at 2c9bef2 Create branch my-branch

Next, we'll create a dummy git commit

/tmp/git-svn-repo$ touch on-my-branch
/tmp/git-svn-repo$ git add on-my-branch
/tmp/git-svn-repo$ git commit -m 'First commit to my-branch'
[master b94a0eb] First commit to my-branch
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 on-my-branch

and finally send it to Subversion:

/tmp/git-svn-repo$ git svn dcommit
Committing to file:///tmp/svn-repo/branches/my-branch ...
    A   on-my-branch
Committed r3
    A   on-my-branch
r3 = d3c5ba3e03e5cdee96f470ff4c9898eb7c523ed8 (refs/remotes/my-branch)
No changes between current HEAD and refs/remotes/my-branch
Resetting to the latest refs/remotes/my-branch

The Subversion working-copy gives us confirmation:

/tmp/svn-repo-wc$ svn up
A    branches/my-branch/on-my-branch
Updated to revision 3.
Sign up to request clarification or add additional context in comments.

1 Comment

as specified on stackoverflow.com/questions/266395/… you can now switch to a svn branch instead of doing the reset --hard: git checkout -b my-local-branch remote-branch # edit git commit git svn dcommit git checkout master # to work again on trunk

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.