Git-svn: create & push a new branch/tag?

After cloning an SVN repository using git-svn with the -s option (git svn clone http://server/repo -s), how does one create a branch or tag and have pushed to the relevant branch/tag directory in the repository when dcommiting?

For instance; if I were to use git to create a foobar branch locally (git checkout -b foobar) how can I have git-svn create the branch on the server (http://server/repo/branches/foobar)?

  • Git branch not returning any results
  • Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
  • Git: See my last commit
  • Git Branch Diversion Issue and workflow
  • What is the best way to generate an svn compatible diff when using git svn?
  • Branch descriptions in git
  • I’m using Git 1.5.5.6.


    Please Note:

    The accepted method below does not work with Git 1.5.5.6 as there is no git svn branch method. I’m still looking for a solution to this that doesn’t involve resolving to working with svn directly.

  • Moving a directory containing a subproject / remains from project within project
  • How to display RoR app code version on heroku?
  • Git commands not working in Mac terminal: “dyld: Symbol not found: ___strlcpy_chk” error
  • Is there a fast way to rebase a long history of commits to master branch?
  • Limit subject line of git commit message to 50 characters
  • Android studio - should the entire .idea directory be in git ignore?
  • 3 Solutions collect form web for “Git-svn: create & push a new branch/tag?”

    You can read all the nitty-gritty details in this tutorial, but the gist is basically the following:

    $ git svn branch -m "Topic branch" my_topic            # Create SVN branch called "my_topic"
    $ git checkout --track -b my-topic remotes/my_topic    # Create the Git branch for "my_topic"
    # Hack hack hack...
    $ git svn dcommit --dry-run    # Make sure you're committing to the right SVN branch
    $ git svn dcommit              # Commit changes to "my_topic" branch in SVN
    

    If you created your local branch before the subversion branch existed and you now want to push your local branch into a subversion branch, you can do the following:

    Create the svn branch from the revision that you created your local branch

        $ svn cp http://svn-repo/my_app/trunk@123 http://svn-repo/my_app/branches/feature1
    

    Fetch the new svn branch so that your git repo knows about it

        $ git svn fetch
    

    The svn branch should now be added as a remote in your git repo

        $ git branch -a
        * feature1
          master
          remotes/feature1
    

    At this point your remote will still be trunk. You need to point your local branch to the new remote branch. You can do this by rebasing your local branch from the remote branch:

        $ git rebase remotes/feature1
    

    Now that your local branch refer to your remote branch, you can commit your changes onto it. First do a dry run so you are confident that your changes will go into your remote branch:

        $ git svn dcommit --dry-run
        Commiting to http://svn-repo/my_app/branches/feature1
    

    Now you may commit changes to your remote branch

        $ git svn dcommit
    

    Most how-tos will tell you to branch subversion first and then create a local branch which tracks the remote branch. But I often don’t decide ahead of time whether my local branch should track a remote branch. Often I branch locally, and make changes without any intention of pushing to a remote branch. If I later decide to commit my local branch into a remote branch I perform the steps above.

    I just wanted to point out that you shouldn’t rebase onto your recently created branch from stuff you already have in a different git branch. git svn dcommit will then afterwards push to trunk it seems. At least that was a problem for me.

    Instead, if you want to pull changes from an old git branch onto this new svn branch, use e.g. cherry-pick.

    Git Baby is a git and github fan, let's start git clone.