SVN分支维护工具

5

我的团队使用SVN进行源代码控制。最近,我一直在一个分支上工作,不时地从主干合并,这是一个相当烦人的经历(参见Joel Spolsky的"Subversion Story #1"),因此我一直在寻找管理分支和合并的替代方法。鉴于集中式SVN存储库是不可协商的,我想要一组满足以下条件的工具。

  1. 完整的修订历史记录应存储在SVN中,包括主干和分支。

  2. 在任何方向上进行合并(甚至可能交叉合并)应该相对轻松。

  3. 尽可能将合并历史记录存储在SVN中。

我已经查看了git-svnbzr-svn,但似乎都不能胜任这份工作——基本上,他们能从SVN仓库导出的版本历史记录中,不能比SVN更好地处理合并。例如,在使用git克隆仓库后,我的分支的版本历史记录显示了原始分支与主干的关系,但git无法将任何中间的SVN合并视为“原生”合并——版本历史记录是一条长线。因此,在git中从主干合并会像在SVN中一样产生很多冲突。(此外,git-svn文档明确警告不要使用git在分支之间进行合并。)
有没有办法调整我的工作流程以满足上述需求?也许我只需要一些提示或技巧(或单独的合并工具?)来帮助SVN更好地合并到分支中?

听起来你真的需要说服你的团队使用Git。:P - Amber
2
我认为,不幸的是,你正在面临一个事实,即SVN在合并分支方面的能力受到限制 - 只要你的中央仓库是一个SVN仓库,任何数量的git魔法都难以拯救你。尽管如此,我当然很想看看是否有任何好的工作方法! - Cascabel
1个回答

2

虽然没有一个纯粹的SVN答案,但我想参考一下Stack Overflow上的问题“如何愚弄git-svn以识别使用svn进行的合并?

我建议在一个特殊的分支中进行这些git合并,但更简单的解决方案是使用git嫁接文件git-svn克隆仓库中记录(至少是最近的)SVN合并,以转换为:

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

into:

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

简化git合并流程,先进行dcommit,然后将其发送回SVN。


补丁文件似乎很有帮助,谢谢!只需为从主干合并的最后一个提交添加补丁即可。这样就足够了吗?您建议使用 git merge --squash 来隐藏 SVN 中真实的 DAG 吗?此外,我想知道这是否满足 #3(但老实说,我不确定拥有合并信息对 SVN 有多有价值)。 - Chris Conway
@Chris:阅读完https://dev59.com/VnE95IYBdhLWcg3wKqyq后,我认为这里不需要使用“merge squash”。SVN可以在“dcommit”期间使用DAG记录一些“mergeinfo”元数据。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接