一种可能的解释是您可能会忘记更改集的某些部分。
如果您要合并的更改集覆盖了您已签出的子目录之外的文件,那么您总是有可能忘记合并这些文件。
例如,如果您在主干上有这样的提交:
r5 | rich | 2009-04-16 22:22:46 +0200 (Thu, 16 Apr 2009) | 2 lines
Changed paths:
M /trunk/subdir1/main.c
M /trunk/subdir2/main.c
Change some stuff
然后您可以从“稳定”分支中签出 subdir1,然后您可以像这样合并更改集 r5:
$ svn co http://example.com/svn/branches/stable/subdir1
$ cd subdir1
$ svn merge -c 5 http://example.com/svn/trunk/subdir1 .
--- Merging r5 into '.':
U main.c
$ svn ci -m"Merged r5 from trunk"
但这只会合并修订版 5 的一半。更糟糕的是,如果您返回并查看日志,它现在将显示以下内容:
$ svn log -g http://example.com/svn/
...
------------------------------------------------------------------------
r5 | rich | 2009-04-16 22:22:46 +0200 (Thu, 16 Apr 2009) | 2 lines
Changed paths:
M /trunk/subdir1/main.c
M /trunk/subdir2/main.c
Merged via: r6
Change some stuff
因此,看起来您已经合并了整个提交,而实际上您只合并了其中的一部分。当然,r6 确实显示稳定分支上只有 1 个文件发生了变化。
------------------------------------------------------------------------
r6 | rich | 2009-04-16 22:28:16 +0200 (Thu, 16 Apr 2009) | 1 line
Changed paths:
M /branches/stable/subdir2
M /branches/stable/subdir2/main.c
Merge revision 5 from trunk
有人必须记住或注意到,只有部分变更集被合并,其余部分需要执行。不使用子目录合并可以避免此问题。
有时您确实不想合并所有先前的提交,而上述场景正是您想要做的。在这种情况下,最好添加一条描述您意图的良好提交消息。