Git-svn:创build并推送一个新的分支/标签?

在使用git-svn和-s选项( git svn clone http://server/repo -s )克隆一个SVN仓库之后,如何创build一个分支或标记并将其推送到仓库中的相关分支/标记目录什么时候dcommit

例如; 如果我要使用git在本地创buildfoobar分支( git checkout -b foobar )我怎么能让git-svn在服务器上创build分支( http://server/repo/branches/foobar )?

我正在使用Git 1.5.5.6。


请注意:

下面接受的方法不适用于Git 1.5.5.6,因为没有git svn branch方法。 我仍然在寻找一个解决scheme,这不涉及到解决与svn直接工作。

您可以阅读本教程中的所有细节,但其基本要点如下:

 $ 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 

如果您在Subversion分支存在之前创build了本地分支,并且您现在想将本地分支推送到Subversion分支中,则可以执行以下操作:

从您创build本地分支的版本创buildsvn分支

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

获取新的svn分支,以便你的git仓库知道它

     $ git svn fetch

svn分支现在应该被添加为你的git仓库中的一个远程仓库

     $ git branch -a
     * feature1
      主
      遥控器/优点1

此时你的遥控器仍然是中继线。 您需要将您的本地分支指向新的远程分支。 您可以通过从远程分支获取本地分支来完成此操作:

     $ git rebase remotes / feature1

现在您的本地分支引用了您的远程分支,您可以将更改提交到它。 首先做一个干运行,所以你有信心你的改变将进入你的远程分支:

     $ git svn dcommit --dry-run
    致力于http:// svn-repo / my_app / branches / feature1

现在你可以改变你的远程分支

     $ git svn dcommit

大多数方法会告诉你首先分支Subversion,然后创build一个跟踪远程分支的本地分支。 但是我经常不提前决定我的本地分支是否应该跟踪一个远程分支。 我经常在本地分支,并且无意推送到远程分支进行更改。 如果我稍后决定将我的本地分支提交到远程分支,则执行上述步骤。

我只是想指出,你不应该从你已经在不同的git分支中拥有的东西上分支到最近创build的分支上。 然后git svn dcommit将会继续推送到主干。 至less这对我来说是一个问题。

相反,如果你想从旧的git分支的变化,到这个新的svn分支,使用,如樱桃采摘。