2013-03-07 86 views
2

我的问题涉及到SVN合并机制的一些基础知识。我在这里不报告合并问题。此外,我已经通过SVN书的合并章(不是新手)。SVN合并基础知识

我有10个修订的主干,我想合并修订5,6,7,8,9和10到一个特定的标签。

我可以通过运行合并操作6次成功合并成乌龟SVN。每次我只指定一个修订(即5,6,7,8,9,10)。

如果我对SVN修订版的理解是正确的,修订版10(HEAD修订版)具有以前版本的所有修复,即5,6,7和9.因此,我可以通过仅运行一次合并操作节省时间,即通过指定修订版10.

对我的问题的明显反应是我应该指定一个“修订范围”。

我的问题是为什么甚至指定一个范围,当修订版10将包含以前修订的所有变化(http://svnbook.red-bean.com/en/1.7/svn-book.html#svn.basic.in-action)?我不能通过指定单个修订(第10)来进行合并,并期望SVN能够正确合并?

+0

不错的问题! +1问题达到基本概念!!! – 2013-03-07 06:35:15

回答

0

实际上,svn merge命令将diff(或changeset)作为参数。作为

svn merge -c10 URL 

它实际上是一样的:所以当你使用这样的命令合并

svn merge -r9:10 URL 

,并通过合并10日带来的变化提交到库。

此外,svn:mergeinfo属性将指示与版本10相对应的变更集已被合并,以便后续合并将变得更加智能,并且不会尝试第二次合并该变更集。

因此,要专门回答您的问题,请在要合并对应于该特定范围的更改时指定svn merge命令的一个修订范围。

有一个关于修改和变更在the documentation通知:

在Subversion,一个全球性的修订数N名的 库中的树:它的仓库看了N次提交后的方式。这也是隐式变更集的名称:如果您将树N 与树N-1进行比较,则可以派生出提交的确切补丁。对于 这个原因,很容易将修订版N视为不仅仅是一棵树,而且也是一个变更集。如果您使用问题跟踪器来管理错误,那么 可以使用修订号码来引用修复 错误的特定修补程序,例如,“此问题已由r9238修复”。然后,某人可以运行svn log -r 9238来运行svn log -r 9238阅读修正 错误的确切变更集,然后运行svn diff -c 9238以查看修补程序本身。并且(你会很快看到 )Subversion的svn merge命令能够使用修订号 的数字。您可以通过在合并参数中命名它们,将特定变更集从一个分支合并到另一个分支: :传递-c 9238到svn合并 会将变更集r9238合并到您的工作副本中。

+0

对不起,我的回复延迟。感谢您的回答。我现在明白,在合并时,必须将修订视为变更集。 – Ben 2013-03-11 22:32:56