【问题标题】:Git-svn: create & push a new branch/tag?Git-svn:创建并推送一个新的分支/标签?
【发布时间】:2010-03-22 08:31:39
【问题描述】:

使用带有-s选项(git svn clone http://server/repo -s)的git-svn克隆SVN存储库后,如何在dcommiting时创建分支或标签并推送到存储库中的相关分支/标签目录?

例如;如果我要使用 git 在本地创建一个 foobar 分支 (git checkout -b foobar) 我怎样才能让 git-svn create 服务器上的分支 (http://server/repo/branches/foobar)?

我使用的是 Git 1.5.5.6。


请注意:

下面接受的方法不适用于 Git 1.5.5.6,因为没有 git svn branch 方法。我仍在寻找不涉及直接使用 svn 的解决方案。

【问题讨论】:

    标签: git git-svn


    【解决方案1】:

    您可以在tutorial 中阅读所有细节,但要点基本上如下:

    $ 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
    

    【讨论】:

    • 适用于我的 git 版本 1.5.5.6 - 没有这样的命令git svn branch
    • git svn branch 在 v1.6.1 中添加。我建议升级,因为 1.5.5.6 已经有一年半的历史了。
    • 如何使用 svn 标签。我用git svn tag -m "tag description" 0.0.2 创建svn 标签。现在我想在 git 中设置适当的标签。我应该怎么做?谢谢
    • 在创建本地分支后检查它是否指向正确的远程分支也是一个好习惯,方法是执行git svn info
    • 仅供参考,从 GIT v1.8.3.2 开始,第二个命令不再有效。您不能再使用此语法跟踪 SVN 分支,请参阅以下问题了解更多信息:git-svn: Cannot setup tracking information; starting point is not a branch
    【解决方案2】:

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

    获取分配给本地分支的svn分支修订

    $ git svn info

    从输出中,URL 字段将是当前 svn 分支路径,Revision 字段将是颠覆修订号

    从您创建本地分支的修订版创建 svn 分支

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

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

    $ git svn fetch

    现在应该将 svn 分支作为远程添加到您的 git 存储库中 $ git branch -a * feature1 master remotes/feature1

    此时您的遥控器仍然是中继线。您需要将本地分支指向新的远程分支。您可以通过从远程分支重新设置本地分支来做到这一点: $ git rebase remotes/feature1

    现在您的本地分支引用了您的远程分支,您可以将更改提交到它。首先进行一次试运行,这样您就可以确信您的更改将进入您的远程分支: $ git svn dcommit --dry-run Commiting to http://svn-repo/my_app/branches/feature1

    现在您可以将更改提交到远程分支 $ git svn dcommit

    大多数指南会告诉你先分支 subversion,然后创建一个本地分支来跟踪远程分支。但我通常不会提前决定我的本地分支是否应该跟踪远程分支。我经常在本地分支,并在不打算推送到远程分支的情况下进行更改。如果我稍后决定将我的本地分支提交到远程分支,我会执行上述步骤。

    【讨论】:

    • @unpluggd:我认为这应该是公认的答案,因为它实际上回答了所提出的问题。也就是说,除非接受的答案假定在输入这些命令之前已经创建并入侵了本地分支。
    • 运行git svn fetch时没有看到新分支
    • @SnapDragon 你可能需要git svn fetch --all 才能看到所有远程分支(包括svn 分支)。
    • 这是确定的答案。非常感谢!
    • 我之前的评论的答案是,是的,你知道。
    【解决方案3】:

    我只是想指出,你不应该根据你在不同 git 分支中已有的东西重新创建你最近创建的分支。 git svn dcommit 然后似乎会推送到主干。至少这对我来说是个问题。

    相反,如果你想从旧的 git 分支拉取更改到这个新的 svn 分支,使用例如樱桃采摘。

    【讨论】:

    • 我刚刚尝试过这个(将 old_branch 合并到 new_svn_branch,然后 dcommit)并且它提交到正确的 SVN 分支(不是主干)。使用 msysgit 1.7.9。
    • 我的意思是如果你在 git 中有 branch1 和 branch2,想在 svn 中创建新的 branch1,然后在 git branch1 中从 branch2 变基。 dcommitting 之后将转到主干(为我做了)。可能是@pestrella 的建议这不是问题。在任何情况下,它都是次要的。
    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 2021-10-05
    • 2013-08-15
    • 2013-04-11
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多