git svn在一个大型存储库中分支

时间:2013-04-08 15:36:47

标签: git svn git-svn

我正在使用“git svn”与具有非标准分支约定的大型SVN repo进行交互。 我看到有多种方法可以像指出here

那样克隆svn repo / branches

我看到了非常不同的行为:

说SVN回购如下:

http://svn.mycom.com/svn/Project
-->trunk
-->defects
-->uat

生产处于“主干”,分支处于“缺陷”,目前的发展处于“uat”状态。

所以说我可以做以下

1。克隆直接..

$ 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/*

这似乎很好用,我确实得到了历史。我想知道两者的更好的方法是什么,如果有什么我需要考虑从一个选项到另一个选项。 但是在这个选项中,如果我必须添加另一个分支,我不能简单地编辑分支部分和逗号分隔列表中的新分支名称,如branches = 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问题。但感觉就像一个黑客。我希望有一种方法可以将它附加到看起来干净的分支列表中。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

注意:不要为稍后创建的新分支添加“fetch”行。我发现添加新的分支名称作为列表中的第一件事就可以了。推出了新的分支信息。

[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

它基本上会重新获取信息,但至少看起来很干净。添加获取行也很好。我个人也不在乎。如果你是细致的,你可以添加如上所述的分支。