2013-04-08 103 views
2

我正在使用“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问题。但只是感觉像一个黑客。我希望有一种方法可以将它附加到看起来很干净的分支列表。

回答

0

使用它几天后,最好的选项是选项#2。

注意:不是为稍后创建的新分支添加“获取”行。我发现添加新的分支名称作为列表中的第一件事,就是这样做的。新的分支信息被拉了。

[svn-remote "svn"] 
url = http://svn.mycom.com/svn/Project 
fetch = uat:refs/remotes/trunk 
branches = defects/{task2,task1}:refs/branches/* 

如果这样做没拉分支,只要删除“的.git/SVN/.metadata”文件夹,运行

git svn fetch 

它将基本上遍布再次读取该信息,但至少看起来很干净。添加获取线也不错。就个人而言,我不在乎任何方式。如果你一丝不苟,你可以像上面提到的那样添加分支。

1

我使用和喜欢第二种方式,哪些IMO是正确的方式来做到这一点。在第二种方法中,您将拥有存储库的所有历史记录,并且可以轻松地在需要的分支之间切换。 另外我认为,如果你要在本地创建一个新的分支,然后将其提交到SVN,第一种方法会给你一些问题。

+0

谢谢Atropo,我同意,顺便说一句,你以后如何添加新的分支?我不能简单地在逗号分隔列表中添加新的分支名称:( – bond 2013-04-08 16:39:44