git-svn:如何通过git创建一个新的svn分支?


193

我有一个跟踪svn存储库的git存储库。我使用克隆了它--stdlayout

我通过创建了一个新的本地分支 git checkout -b foobar

现在,我希望该分支最终出现在…/branches/foobarsvn存储库中。

我该怎么办?

(摘录了大量调查性文字。如果您愿意,请参阅问题历史记录)


Answers:


280

我知道这个问题已经回答了一段时间,但是在阅读之后,我可能会帮助添加特定git svn branch命令的示例并将其与典型的工作流程相关联。

就像kch回答一样,请使用git svn branch。这是一个完整的示例,(请注意要-n进行空运行测试):

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

如果一切顺利,服务器将回答如下:

复制https://scm-server.com/svn/portal/trunk在r8914到https://scm-server.com/svn/portal/branches/auth_bug ...

如果没有-n切换,服务器可能会添加以下内容:

发现可能的分支点:https://scm-server.com/svn/portal/trunk => https://scm-server.com/portal/branches/auth_bug,8914

找到分支父级:(refs / remotes / auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

用do_switch跟随父对象

成功跟随父级r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(引用/远程/ auth_bug)

最好的部分是,现在您可以根据远程分支创建本地分支,如下所示:

git checkout -b local/auth_bug auth_bug

这意味着“签出并创建名为的本地分支auth_bug,并使它跟随远程分支(最后一个参数)auth_bug

通过dcommit--dry-run-n)一起使用,测试您的本地分支可以在该远程分支上工作:

git svn dcommit -n

SVN服务器应使用新的分支名称进行回复:

致力于https://scm-server.com/svn/portal/branches/auth_bug ...


2
是的,git co表示Jesper设置了git别名。
杰森·阿克森

3
更新并替换git cogit checkout使该示例适用于任何人
JesperRønn-Jensen2010年

5
我已经对这个答案投了赞成票,但我不知道我有多少次回来。谢谢!
Ben Doerr

35
git-svn branch命令中有一个棘手的部分-您必须在线才能以这种方式创建新分支。您可以离线执行以下操作:1. git checkout -b foobar2. hack-hack-hack 3 git commit -m "Done foobar".。并在联机时通过执行1. git svn branch foobar2. git branch --set-upstream foobar remotes/foobar3.来推动此更改git svn dcommit
vadishev

2
因此,将步骤2替换为git checkout -b foobar-new remotes/foobar。3. git checkout foobar4. git rebase foobar-new5.测试以确保分支现在提交到svn分支。git svn dcommit --dry-run6.最后实际提交git svn dcommit7.删除临时分支git branch -D foobar-new
jjcf89 2015年

64

从git v1.6.1开始git svn branch可用。

从git docs:

    科
        在SVN信息库中创建一个分支。

        -m,-消息
            允许指定提交消息。

        -t,--tag
            通过使用tags_subdir而不是branchs_subdir创建标签
            在git svn init期间指定。

早期版本的git无法提供创建svn分支的方法。


4

@kch我刚刚(2008年12月7日)编译了git的v1.6.1-rc1标记,它确实包含git svn分支命令及其文档。因此git v1.6.1发行版应该(希望)包含此命令。


确实,我现在安装了1.6.1,并且该命令可用。相应地更新了我的答案。
09年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.