2010-03-29 44 views
5

我的团队使用SVN进行源代码管理。最近,我一直在从树干偶尔合并,这是一个相当恼人的经历(比较Joel Spolsky的"Subversion Story #1"),所以我一直在寻找替代方法来管理分支和合并。鉴于中央SVN存储库是不可协商的,我想要的是一组满足以下条件的工具。在SVN中维护分支机构的工具

  1. 完整的修订历史应该存储在SVN中,用于中继线和分支。

  2. 在任一方向(可能纵横交错)合并应该是相对无痛的。

  3. 合并历史应尽可能存储在SVN中。

我已经看了两个git-svnbzr-svn既不似乎是胜任工作—基本上,考虑到修订历史记录,他们可以从SVN仓库的出口,他们似乎无法做任何好作业处理合并比SVN可以。例如,在使用git克隆版本库之后,我的分支的修订历史记录显示原始分支脱离中继线,但git没有“看到”任何临时SVN合并为“原生”合并—修订历史记录为一长线。因此,任何试图从git中汇总干线的尝试都会产生与SVN合并一样多的冲突。 (此外,git-svn documentation明确警告不要使用git到部门之间的合并。)

是否有办法来调整我的工作流程,让git满足上述要求?也许我只需要提示或技巧(或单独的合并工具?)来帮助SVN更好地融入分支机构?

+0

听起来像你真的需要说服你的团队使用git。 :P – Amber 2010-03-29 05:22:11

+2

我认为,不幸的是,你面对SVN仅仅限于合并分支的能力这一事实 - 只要你的中央回购是一个SVN回购,那么任何数量的git魔法都很难拯救你。我当然很好奇,看看有没有好的工作杂志! – Cascabel 2010-03-29 05:23:00

回答

2

而无需纯SVN的答案,我想指SO问题“How to fool git-svn to recognize merges made with svn?

我建议做那些蠢货,一个特殊分支合并,但一个简单的解决办法是记录(至少最近的)SVN合并与git grafts filegit-svn克隆回购,以改造:

o-...-A---o---D--- unstable 
/  
X-----B---M---o---o--- stable 

到:

o-...-A---o---D--- unstable 
/  \ 
X-----B---M---o---o--- stable 

,在dcommit并将其发送回SVN之前,缓解git合并过程。

+0

移植文件似乎帮助了很多,谢谢!从trunk中最后一次合并添加一个移植似乎就足够了。是对的吗?你建议使用'git merge --squash'从SVN中隐藏真正的DAG吗?另外,我想知道这个满足#3(尽管我不确定mergeinfo对SVN有多大价值)。 – 2010-03-29 13:25:54

+0

@Chris:在阅读http://stackoverflow.com/questions/2427238/in-git-what-is-the-difference-between-merge-squash-and-rebase后,我不认为是“合并壁球”在这里是必要的。 SVN可以使用DAG在'dcommit'期间记录一些'mergeinfo'元数据。 – VonC 2010-03-29 16:29:57