smf*_*f68 7 svn version-control merge
关于如何在SVN中合并单个文件的问题之前已经得到了回答,所以我的问题是:这样做是否安全?如果我最终在某个时候合并整个分支,SVN会"获取"特定文件已经合并吗?如果我合并整个分支之前来回合并更改怎么办?
Dav*_* W. 15
是的,您可以合并单个文件,但这通常被认为是不好的做法.
问题是Subversion使用svn:mergeinfo跟踪合并.如果文件没有此svn:mergeinfo属性,则使用svn:mergeinfo父目录.当您合并单个文件时,所有这些文件现在都可以获得它们自己的svn:mergeifno属性.
这会导致真正的问题吗?不,Subversion运行正常.这个问题只是被察觉了.每次Subversion更新svn:mergeinfo属性时,它都会创建该文件的另一个版本,即使该文件的内容没有更改.
这是一个问题,当你将一个主干合并到一个分支(或反之亦然).你运行这样的命令:
$ svn merge http://svn.mycorp.com/svn/project/trunk .
Run Code Online (Sandbox Code Playgroud)
您会看到100多个已修改的文件,但您知道应该只合并3或4个文件.
检查这些文件,您发现唯一的区别是该svn:mergeinfo属性已更改为显示您已将最新内容合并到这些文件中(即使它不会更改文件本身的内容).没有实际问题.只需允许Subversion 在提交时更新这些文件的svn:mergeinfo属性,一切都很好.是的,合并将显示在提交中更改了100多个文件svn log,但仔细检查将显示只有他们的svn:mergeinfo属性已更改.
你不应该做的是还原这些文件.这将标志着更改未合并到这些文件中(即使它没有更改其内容).下一次合并将尝试重新合并先前的合并并造成更大的破坏.
有时,当开发人员看到这一点时,他们开始向我抱怨修改.毕竟,如果文件本身没有变化,为什么要修改这些文件?他们对所有svn:mergeinfo变化感到沮丧.
这就是为什么始终在项目的根目录而不是单个文件中合并的最佳实践.这样,只有项目根目录下的目录才能获取svn:mergeinfo属性,项目中的所有其他文件都只使用该svn:mergeinfo属性.
如果您和您的所有开发人员都理解这一点,并且愿意忍受这种行为,那么合并单个文件就没有问题.由于这种复杂情况,通常不会这样做.