Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在svn合并后忽略svn:mergeinfo中的更改是否安全?_Svn_Merge - Fatal编程技术网

在svn合并后忽略svn:mergeinfo中的更改是否安全?

在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中进行合并时,几乎应该始终合

我正在尝试将主干中的一个带有修订版1000(影响六个Java文件)的提交合并到一个分支中。执行以下命令显示了完全相同的效果:

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