我的问题涉及到SVN合并机制的一些基本原理。我是不报告合并问题在这里。此外,我已经读过SVN书的合并章节(不是新手)。
我在主干上有10个修订版,我想将修订版5、6、7、8、9和10合并到一个特定的标签上。
通过运行6次合并操作,我可以在tortoise SVN中成功地进行合并。每次我只指明一次修订(即5、6、7、8、9、10)。
如果我对SVN修订的理解是正确的,那么第10版(头版)就有了以前版本的所有修正,即5、6、7和9。因此,只要运行一次合并操作,即指定修订10,就可以节省时间。
对我的问题的明显反应是,我应该具体说明“修订范围”。
我的问题是,为什么甚至指定一个范围时,修订10将包含所有以前的修订(http://svnbook.red-bean.com/en/1.7/svn-book.html#svn.basic.in-action)?难道我不能只通过指定一个修订(第10号)来进行合并,并期望SVN进行正确的合并吗?
发布于 2013-03-07 10:01:44
实际上,svn merge命令以diff (或changeset)作为参数。因此,当您使用这样的命令进行合并时:
svn merge -c10 URL事实上,这和:
svn merge -r9:10 URL并且正在合并第10次提交到存储库所带来的更改。
此外,svn:mergeinfo属性将指示与修订10相对应的变更集已被合并,因此后续的合并将更智能,并且不会再次尝试合并该变更集。
因此,要具体回答您的问题,当您想要合并对应于特定范围的更改时,可以为svn merge命令指定一个修订范围。
在文献资料中有一个关于更改和更改的通知
在Subversion中,全局修订编号N为存储库中的树命名:这是存储库处理Nth提交的方式。它也是隐式变更集的名称:如果将树N与树N1进行比较,就可以得到提交的确切修补程序。由于这个原因,我们很容易认为修订N不仅仅是一棵树,而且也是一种变化集。如果您使用问题跟踪器来管理bug,则可以使用修订编号来引用修复错误的特定补丁--例如,“此问题已由r9238修复”。然后,有人可以运行svn日志-r 9238来读取修复错误的确切更改集,并运行svn diff -c 9238来查看修补程序本身。Subversion的svn merge命令(您很快就会看到)能够使用修订编号。您可以在合并参数中将特定变更集从一个分支合并到另一个分支:将-c 9238传递给svn合并将变更集r9238合并到您的工作副本中。
https://stackoverflow.com/questions/15264557
复制相似问题