我正在使用“git svn”与非标准分支约定的大型SVN回购交互。 我看到有多种方式克隆将svn /分支机构指出heregit svn分支在一个大的仓库
我看到真的很不同的行为:
说SVN回购协议如下:
http://svn.mycom.com/svn/Project
-->trunk
-->defects
-->uat
生产在“干线”中,分支在“缺陷”中,当前的发展在“UAT”中。
所以这样说我可以做以下
1.克隆直接UAT ..
$ git svn clone http://svn.mycom.com/svn/Project/uat
我这样做时,我的.git/config文件看起来像:
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project/uat
fetch = :refs/remotes/trunk
然后我添加分支here 我的.git/config看起来类似于:
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project/uat
fetch = :refs/remotes/trunk
[svn-remote "task1"]
url = http://svn.mycom.com/svn/Project/defects/task1
fetch = :refs/remotes/task1
现在,当我运行
$git log --decorate --all --graph
我看到我的新分支只有1承诺,即。分支创建它并不涉及要掌握的实际历史。它显示了它自己的历史行,没有任何连接到先前的提交。
2.克隆与-T然后添加分支 替代解决方案,我发现是:
$git svn clone http://svn.mycom.com/svn/Project/ -T uat Project --no-minimize-url
Since the "Defects" has lot many branches, and it would take hours, i then did:
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project
fetch = uat:refs/remotes/trunk
branches = defects/{task1}:refs/branches/*
这似乎是工作不错,我得到了历史。我想知道如果有什么我需要考虑从一个选择到另一个选择的话,什么是更好的方式。 但是,在这个选项中,如果我必须添加另一个分支,我不能简单地在逗号分隔列表中像branch = defects/{task1,task2}那样编辑分支部分和新分支名称。这不起作用就像GIT缺陷。 我再添加另一获取分支
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project
fetch = uat:refs/remotes/trunk
branches = defects/{task1}:refs/branches/*
fetch = defects/task2:refs/branches/task2
这正常线以下,我得到的分支历史和能够切换W/O问题。但只是感觉像一个黑客。我希望有一种方法可以将它附加到看起来很干净的分支列表。
谢谢Atropo,我同意,顺便说一句,你以后如何添加新的分支?我不能简单地在逗号分隔列表中添加新的分支名称:( – bond 2013-04-08 16:39:44