在svn合并后忽略svn:mergeinfo中的更改是否安全?
我正在尝试将主干中的一个带有修订版1000(影响六个Java文件)的提交合并到一个分支中。执行以下命令显示了完全相同的效果:在svn合并后忽略svn:mergeinfo中的更改是否安全?,svn,merge,Svn,Merge,我正在尝试将主干中的一个带有修订版1000(影响六个Java文件)的提交合并到一个分支中。执行以下命令显示了完全相同的效果: svn merge -c1000 https://<my-project>/trunk svn merge -r999:1000 https://<my-project>/trunk 恢复所有更改的svn:mergeinfo文件和目录,只提交我最初认为要合并的六个Java文件,可以吗?结果是什么?在Subversion中进行合并时,几乎应该始终合
svn merge -c1000 https://<my-project>/trunk
svn merge -r999:1000 https://<my-project>/trunk
恢复所有更改的
svn:mergeinfo
文件和目录,只提交我最初认为要合并的六个Java文件,可以吗?结果是什么?在Subversion中进行合并时,几乎应该始终合并到项目的基础。即使要合并的文件的目标被深埋在目录层次结构中,这也是正确的
Subversion使用属性(特别是svn:mergeinfo
属性)跟踪合并。此属性将添加到合并发生的基础。如果仅从项目根目录合并,则只有项目根目录具有此属性。如果您将所有内容合并到一起,则整个项目中都会有svn:mergeinfo
属性。每当发生合并,并且目录层次结构中的某个地方有一个svn:mergeinfo
属性时,必须更新该属性
即使它们所在的目录没有更改,也不要忽略这些属性。子目录中可能有一个文件依赖于该svn:mergeinfo
将Subversion修订视为变更集。也就是说,单个修订是可能影响多个文件的单个更改。合并也是如此。假设您的项目如下所示:
> svn diff SomeOtherFile.java
Property changes on: SomeOtherFile.java
___________________________________________________________________
Modified: svn:mergeinfo
Merged SomeOtherFile.java:r1000
foo
src
test
...
main
resources
...
java
com
vegicorp
...
munge
frapify
purèe.java
在分支上,您有一个修订版,其中包含您希望合并到主干中的pureèe.java中的更改。很容易进入foo/src/main/java/com/vegicorp/munge/frapify
目录并从那里处理合并。这将在frapify
目录上创建一个svn:merginfo
,它将永远与您同在。每次您在任何父目录中进行合并时,都会得到一个svn:mergeinfo
的更改
相反,在项目的根目录上执行合并,即foo
目录。您的合并仍然只会影响pureèe.java文件,但是svn:mergeinfo
更改的将是foo
目录中的一个,所有其他合并都将在该目录中进行
因此,您不能忽略svn:mergeinfo
。最好的情况是Subversion会认为某个特定的修订版没有被合并,并且会再次与该修订版合并。最糟糕的是,你把合并结果搞砸了,最终你会把合并结果加倍
有一种方法可以清理这个烂摊子。检查层次结构中的所有svn:mergeinfo
属性,确保项目根目录的合并信息中包含所有这些修订。如果没有,则在根目录处合并这些更改。一旦根目录的svn:mergeinfo
包含每个合并,就可以删除分散在整个项目中的另一个svn:mergeinfo
然而,如果您不让开发人员在项目的根目录中进行合并,那么几个月后您将面临同样的困境。因此,培训开发人员非常重要
开发人员是固执的生物,他们坚持按自己的方式做事。我们在具有默认目录布局的站点上使用了Maven,一个团队坚持认为他们更喜欢自己的目录布局。这给我们的项目带来了各种各样的问题,但是由于这个团队的诡计,导致了大规模的部署失败,他们被告知要么按照其他人的方式(以及Maven希望的方式)进行部署,要么找到一份新工作
即使在那之后,项目负责人一直告诉我目录布局有多错误,如果项目中的其他人都按照他的逻辑和改进的目录布局进行操作,一切都会好起来。这个问题看起来几乎一样:查看上的SVN文档,非常感谢您的详细解释。不过,我必须指出,这是
pureèe
,而不是pureèe
!