有没有一种方法可以同时跨越多个非连续修订版本进行svn diff或svn merge?

15

因此在SVN中,您可以执行以下操作:

svn merge -r555:558
svn diff -c551

但是(据我所知)没有办法做到:

svn merge -r555:558, 592:594
svn diff -c551, 557, 563

对于合并,您始终可以按顺序执行多个命令:

svn merge -r555:558
svn merge -r592:594

但是对于差异来说,这样做只会产生多个差异(而且对于合并也不太优化,因为您可能会由于稍后的修订中可能被删除的内容而导致冲突)。

所以,我的问题是......是否有任何方法,使用SVN本身或结合Linux命令,进行真正的非序列化、多版本的差异和/或合并?


我应该补充说明一下,我对此感兴趣的原因是我们的版本控制系统与我们的缺陷跟踪系统绑定在一起。给定的缺陷可能会有几个(非连续的)修订版本,所以如果我们可以: A)同时查看所有这些修订版本的差异,以进行同行评审。 B)同时合并所有这些修订版本,将修复内容移动到我们的生产分支中,那就太好了。 - machineghost
1个回答

20

你可以在一个命令中合并多个修订版本(至少在1.6版本中):

svn merge -c 551, 557, 563
svn merge -r 555:558 -r 592:594

然而,svn diff似乎不支持多个非连续的版本之间的差异对比。

要获取累积补丁,您可以单独获取差异,然后使用combine-diff逐个合并它们。这不是理想的解决方案,但您可以编写一个脚本来自动化此过程。


你太棒了!我不知道我可以传递多个-r或-c参数,而且合并差异的建议也很有帮助。谢谢 :-) - machineghost
1
请注意,对我来说,命令svn merge -c 551, 557, 563导致了一个“参数过多”的错误,这个错误可以通过将更改列表用引号括起来解决,如下所示:svn merge -c "551, 557, 563" - dave
1
确认@dave的问题并在1.7.14版本中修复。 - CodeMonkey

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