我的团队使用SVN进行源代码管理。最近,我一直在一个分支机构,偶尔从主干合并,这是一个相当烦人的经历(参见Joel Spolsky的"Subversion Story #1"),所以我一直在寻找管理分支和合并的替代方法。鉴于集中式SVN存储库是不可协商的,我想要的是一组满足以下条件的工具。
完整的修订历史记录应存储在SVN中,用于中继和分支。
在任何一个方向(并且可能是纵横交错)的合并应该相对无痛。
合并历史记录应尽可能存储在SVN中。
我已经查看了git-svn
和bzr-svn
,似乎都没有达到这个目的 - 基本上,鉴于他们可以从SVN存储库导出的修订历史,他们似乎无法做一个比SVN更好的工作处理合并。例如,在使用git
克隆存储库之后,我的分支的修订历史记录显示了主干的原始分支,但git
没有“看到”任何临时SVN合并为“本机”合并 - 修订历史是一条长线。因此,在git
中从trunk进行合并的任何尝试都会产生与SVN合并一样多的冲突。 (此外,git-svn
documentation明确警告不要使用git
在分支之间进行合并。)
有没有办法调整我的工作流程以使git
满足上述要求?也许我只需要提示或技巧(或单独的合并工具?)来帮助SVN更好地融入分支机构?
答案 0 :(得分:2)
如果没有纯粹的SVN答案,我想参考SO问题“How to fool git-svn to recognize merges made with svn?”
我建议在特殊分支中进行这些git合并,但更简单的解决方案是在git-svn
克隆仓库中使用git grafts file记录(至少最近的)SVN合并,以便变换:
o-...-A---o---D--- unstable
/
X-----B---M---o---o--- stable
成:
o-...-A---o---D--- unstable
/ \
X-----B---M---o---o--- stable
,在dcommit之前缓和git merge过程并将其发送回SVN。