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

标签 svn merge tortoisesvn svn-merge

我们的主 SVN 项目根目录中有几个大型子项目。
在使用我们的发布分支时,我只提交和合并我的子项目,主要是因为它更快。

然而,一位同事指出了这个reference to merging subdirectories in Version Control with Subversion (又名“SVN 书”):



不幸的是,这就是警告的范围。链接部分也没有给出解释。

提交和合并 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/

相关文章:

svn - Drupal 源代码控制策略?

git - git fetch 到底做了什么?

r - 在 R 中匹配文本字符串时处理错误拼写

xml - 如何将 Subversion 日志导出到电子表格

svn - TeamCity SVN 提交消息

email - 从visualsvn向office365提交后提交电子邮件

java - 在 IntelliJ IDEA 中的 Subversion 源代码管理下添加现有模块

python - 使用 pandas 增量数据加载

.net - 在 .NET 项目中使用 Subversion TortoiseSVN 合并算法

perl - 将提交评论复制到 Windows 剪贴板