7

之前已经回答了如何在 SVN 中合并单个文件的问题,所以我的问题是:这样做安全吗?如果我最终在某个时候合并整个分支,SVN 会“获取”特定文件已经被合并吗?如果我在合并整个分支之前来回合并更改怎么办?

4

1 回答 1

17

是的,您可以合并单个文件,但这样做通常被认为是不好的做法

问题是 Subversion 使用svn:mergeinfo来跟踪合并。如果文件没有此svn:mergeinfo属性,则使用svn:mergeinfo父目录的 。当您到处合并单个文件时,所有这些文件现在都拥有自己的svn:mergeifno属性。

这会导致真正的问题吗?不,Subversion 工作正常。问题只是被察觉。每次 Subversion 更新svn:mergeinfo属性时,它都会创建该文件的另一个版本,即使该文件的内容没有更改。

当您将主干合并到分支时(反之亦然),这是一个问题。你运行这样的命令:

$ svn merge http://svn.mycorp.com/svn/project/trunk .

您会看到 100 多个已修改的文件,但您知道应该只合并 3 或 4 个文件。

检查这些文件,您会发现唯一的区别是svn:mergeinfo属性已更改以表明您已将最新内容合并到这些文件中(即使它不会更改文件本身的内容)。没有真正的问题。只需允许 Subversion在提交时更新这些文件的svn:mergeinfo属性,一切都很好。是的,如果您执行 a ,合并将显示 100 多个文件在提交中发生了更改svn log,但仔细查看会显示只有它们的svn:mergeinfo属性发生了更改。

您不应该做的是还原这些文件。这将标志着更改没有合并到这些文件中(即使它没有更改它们的内容)。下一次合并将尝试重新合并上一次合并并造成更大的破坏。

有时,当开发人员看到这一点时,他们开始向我抱怨修改。毕竟,如果文件本身没有变化,为什么还要修改这些文件呢?他们对所有的svn:mergeinfo变化感到沮丧。

这就是为什么始终在项目的根目录而不是单个文件合并被认为是最佳实践。这样,只有项目根目录下的目录才能获得该svn:mergeinfo属性,而项目中的所有其他文件都将简单地使用该svn:mergeinfo属性。

如果您和您的所有开发人员都理解这一点,并且愿意忍受这种行为,那么合并单个文件就没有问题。由于这种并发症,通常不会这样做。

于 2012-10-04T16:55:47.343 回答