是否可以通过 SVN/Tortoise/Subclipse 合并但排除某些修订

Is it possible to merge but excluding certain revisions by SVN/Tortoise/Subclipse

假设项目有以下修订

rev 1000
rev 1001
..
rev 1008
...
rev 1011
...
rev 1015

是否可以有任何非手动解决方案来包括从 10001015 的所有修订但排除 10081011?来自 Subversion/Tortoise/Subclipse 的工具或命令是首选。

如果您使用的是 TortoiseSVN,则过程相对简单:

  1. 右键单击要将更改合并到的文件夹。
  2. TortoiseSVN > 合并...
  3. 合并类型默认应该select"Merge a range of revisions",所以 点击下一步。
  4. 指定 URL
  5. 在Revision range to merge框中,勾选特定范围,然后使用 1000-1007,1009-1010,1012-1015
  6. 然后单击下一步,然后单击合并

这将有效地合并除 1008 和 1011 之外的所有更改。或者,如果您不介意在 1011 之后合并所有内容,则可以使用 1012-HEAD

一个选项是指定要合并的修订范围。但是,另一种方法是 "block" 合并您不想要的修订。您可以使用 --record-only 选项执行此操作。 Subclipse merge UI 为此有一个特定的 UI 选项:Manually record merge information (Block one or more revisions)。使用此选项,您可以通过向导并选择您不想合并的特定修订版(1008 和 1011)。完成后,它会将这些修订记录为已合并到合并信息中。所以现在您可以返回并合并该范围内的所有修订,SVN 将跳过这两个修订,因为它假定它们已经合并。

在 SVN Book 中描述了这个过程:http://svnbook.red-bean.com/en/1.7/svn.branchmerge.advanced.html#svn.branchmerge.advanced.blockchanges