在SVN子目录上提交和合并被认为是有害的吗?

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)

有人必须记住或注意到只有部分变更集合并而其他部分需要合并.不使用子目录合并可以避免此问题.

有时候你真的不想合并以前的所有提交,而上述场景正是你想要做的.在这种情况下,最好添加一个描述您意图的良好提交消息.


Leo*_*man 6

另一个原因可能是仅合并到根限制了将在存储库中的文件夹/文件上设置的svn:mergeinfo属性的数量.