msk*_*her 11 svn tortoisesvn merge svn-merge
我们的主要SVN项目根目录中有几个大型子项目.
在使用我们的发布分支时,我只提交并合并我的子项目,主要是因为它更快.
但是,一位同事指出这个引用将版本控制中的子目录与Subversion(又名"SVN Book")合并:
- 对于长期释放分支(如"公共分支模式"一节中所述),仅在分支的根上执行合并,而不是在子目录上执行合并.
不幸的是,这是警告的程度.链接部分也没有给出解释.
提交和合并SVN子目录对发布分支有害吗?
短命功能分支怎么样?
ric*_*chq 14
一种可能的解释是您可能会忘记更改集的某些部分.
如果更改设置您正在合并已检出的子目录之外的封面文件,则始终可能会忘记合并这些文件.
例如,如果你在trunk上有这样的提交:
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
Run Code Online (Sandbox Code Playgroud)
然后您从分支"stable"中检出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"
Run Code Online (Sandbox Code Playgroud)
但这只会合并修订版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
Run Code Online (Sandbox Code Playgroud)
所以看起来你已经合并了整个提交,而实际上你只合并了一些提交.当然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
Run Code Online (Sandbox Code Playgroud)
有人必须记住或注意到只有部分变更集合并而其他部分需要合并.不使用子目录合并可以避免此问题.
有时候你真的不想合并以前的所有提交,而上述场景正是你想要做的.在这种情况下,最好添加一个描述您意图的良好提交消息.