有没有办法使用svn:mergeinfo关闭TortoiseSVN?

时间:2009-03-07 20:13:58

标签: svn tortoisesvn

当我正在进行TortoiseSVN合并时,它包含一堆目录,并且一些文件包含在已修改的文件中,即使没有实际更改。

它会更改属性svn:mergeinfo

是否有任何理由需要在目录/文件上设置这些属性?有没有办法绕过不对svn:mergeinfo进行这些更改?

我通常只是将项目还原然后提交,但这会浪费额外的时间。

10 个答案:

答案 0 :(得分:44)

这很有可能发生,因为这些文件和目录具有从先前合并设置的svn:mergeinfo属性。我认为以一种导致将mergeinfo写入单个文件的方式合并单个文件或目录通常不是一个好主意。您应该养成在工作流可能的最高级别合并的习惯,以便mergeinfo属性仅在结构目录上设置,例如/ trunk或/branches/1.0。

但是,如果您确实发现自己在单个文件和文件夹上使用mergeinfo属性,那么您可以做两件事:第一件事就是从相关文件和目录中删除svn:mergeinfo属性。我不确定这是推荐的,除非你真的知道你在做什么,以及可能产生的影响。在执行此操作之前,请阅读文档!

你可以做的第二件事是按照SVN要求的方式提交属性更改,如果你信任该软件,可能是正确的做法。

话说回来,我一直在与队友一起努力养成正确的习惯,这样我们就不会再烦恼了。

答案 1 :(得分:38)

SVN 1.7及更高版本

这应该在SVN 1.7中修复。来自the release notes

  

如果子树不受合并的影响,则合并不再在子树(具有自己的显式mergeinfo)上记录mergeinfo(描述合并)。对于具有显式mergeinfo的大量子树的用户,这应该会大大减少虚假svn:mergeinfo属性更改的数量。

1.7

之前的SVN

一旦文件/文件夹具有显式的mergeinfo,每个都会发生什么 后续合并到分支将更新该mergeinfo即使 文件/文件夹无关。这很烦人,因为它引入的越来越多 每次合并的变更清单都是混乱的。

为避免这种情况,例如,仅合并到分支的“root”文件夹 “/branches/maintenance2.x”。下面没有任何文件或文件夹 然后“/branches/maintenance2.x”应该获得mergeinfo。关注merging advice in the SVN book

不幸的是,即使您仅在分支的“根”文件夹中合并, 空的svn:mergeinfo属性仍然可以出现在单个文件中 文件夹复制时,表示他们没有收到 与他们的兄弟姐妹一样合并。

删除多余的子树mergeinfo可能是安全的。一种方法是通过递归删除项目根目录中每个文件和文件夹的svn:mergeinfo属性。 (但是将mergeinfo保留在根文件夹本身!)

或者,您可以升级到Subversion 1.6。我已经确认它解决了这个问题。它甚至似乎删除了早期版本为您添加的多余合并信息。

从评论来看,SVN 1.6中仍然存在多余的子树mergeinfo出现的情况。但我无法重现这一点。

答案 2 :(得分:14)

如果使用--ignore-ancestry选项进行合并,则不会首先创建mergeinfo属性。

svn merge --ignore-ancestry -c 1234 svn://sourcecontrol .

答案 3 :(得分:6)

如果勾选忽略祖先,则不会在文件夹中创建svn mergeinfo。如果你已经获得了svn合并信息,只需恢复它并通过检查忽略祖先再次进行合并。

Enter image description here

答案 4 :(得分:3)

svn:mergeinfo是Subversion用于track merge history的属性。我只是让它做它必须做的事情......你可能需要稍后进行合并历史跟踪,并发现它不起作用,因为你没有提交这些属性。

答案 5 :(得分:2)

Stack Overflow问题Remove unnecessary svn:mergeinfo properties中给出的命令将删除任何额外的mergeinfo。

From the root of the project do:

svn propdel svn:mergeinfo -R
svn revert .
svn ci -m "Removed mergeinfo"

答案 6 :(得分:1)

我想补充一点,在Subversion 1.5.5中修复了这个bug的至少一部分。来自1.5.5 CHANGES file

do not create mergeinfo for wc-wc moves or copies (r34184, -585)

也就是说,在1.5之前的SVN中存在一个错误,它会创建它没有使用的mergeinfo条目,并且是多余的,这可能是原始提问者如果有很多{{{{{{ 1}}属性。

答案 7 :(得分:0)

我们在项目中递归删除了它,因为几乎所有文件都有这个信息使得合并非常烦人(如果只有一个文件被修改,所有文件都必须合并)。从现在开始,我们只会合并到根目录,这将在未来避免这种情况。

到目前为止,它没有给我们任何问题。记录仍然可用于文件,并且似乎是相同的(但无论如何都要自行承担风险!)。

哦,我们在我们的行李箱上做了,就在创建一个新的分支之前。这样,我们就可以从一个清白的板岩开始。

答案 8 :(得分:0)

很棒的问题和答案!我们最近遇到了这个问题,因为我们正试图解决自动构建系统的局限性。我们的构建系统使用版本和路径信息自动增加.bdsproj和一些.dpr / .dpk文件。

我想改变它......但是现在,如果你想将一个分支与另一个分支合并,你会得到你改变的少数文件,然后是构建机器改变的1000个文件。所以我们一直在进行“有针对性”的合并,有时候是一个文件。特别是对于具有合法更改的.dpr或.bdsproj文件(例如包含额外单元)。 现在我知道发生了什么,所以我希望能够制止这种疯狂。

谢谢Stack Overflow!

答案 9 :(得分:0)

我的团队也遇到了这个问题,这使得整个合并过程有点混乱。 阅读本文之后,我尝试从多个文件中删除svn:mergeinfo属性,经过一些进一步的测试后,看起来就解决了这个问题。