我们的主 SVN 项目根目录中有几个大型子项目。
在使用我们的发布分支时,我只提交和合并我的子项目,主要是因为它更快。
然而,一位同事指出了这个reference to merging subdirectories in Version Control with Subversion (又名“SVN 书”):
- For long-lived release branches (as described in the section called “Common Branching Patterns”), perform merges only on the root of the branch, not on subdirectories.
不幸的是,这就是警告的范围。链接部分也没有给出解释。
提交和合并 SVN 子目录对发布分支有害吗?
短期功能分支怎么样?
最佳答案
一种可能的解释是您可能忘记了更改集的某些部分。
如果您正在合并已 check out 的子目录之外的覆盖文件的更改集,那么您总是有可能忘记合并这些文件。
例如,如果您在主干上有这样的提交:
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
然后你可以从你的分支“稳定”中 checkout 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
有人必须记住或注意,只有一部分变更集被合并,其余的需要做。不使用子目录合并可以避免这个问题。
有时您真的不想合并以前的所有提交,而上述场景正是您打算做的。在这种情况下,最好添加一个描述您意图的良好提交消息。
关于svn - 在被认为有害的 SVN 子目录上提交和合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/757831/