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


70

当我执行TortoiseSVN合并时,即使没有实际更改,它也包含一堆目录和一些文件到修改后的文件中。

它更改属性svn:mergeinfo

有什么理由需要在目录/文件上设置这些属性?有什么办法可以避免不做这些更改svn:mergeinfo

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

Answers:


44

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

但是,如果确实在单个文件和文件夹上具有mergeinfo属性,则可以执行以下两项操作:第一件事就是简单地从相关文件和目录中删除svn:mergeinfo属性。我不确定是否建议使用此方法,除非您真的知道自己在做什么以及可能会有什么效果。在执行此操作之前,请先阅读文档!

您可以做的第二件事是,提交属性会更改SVN希望您执行的方式,如果您信任该软件,则可能是正确的做法。

话虽如此,我一直在与队友们一起养成正确的习惯,这样我们就不会再有这种烦恼了。


3
谢谢,似乎哪些文件设置了此属性几乎是随机的,并且它必须来自以前的开发人员,它们是从非根目录合并而成的。我将其删除。
Brian R. Bondy

1
非常感谢您澄清这是如何发生的:)
TheXenocide

我按照您的建议编辑了属性,以告诉svn一切正常。但是有一个问题……首先,我用主干的当前版本更新了分支的额外元数据文件。当我尝试重新整合到主干工作副本时,svn告诉我必须先进行更新。我更新并注意到svn版本已增加。这很明显:属性在分支中的提交导致全局转速被提高。然后,我再次编辑了mergeinfos,这次指定的是主干版本的修订版本,当前版本之前是一个修订版本。一切都很好。
Diego Medaglia

当我尝试合并分支中的更改时(也包括分支创建修订版),我收到了相同的消息。当我取消选中分支创建修订时,它就像一个魅力。谢谢。
drinovc

39

SVN 1.7及更高版本

这应该在SVN 1.7中修复。从发行说明中

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

1.7之前的SVN

发生的情况是,一旦文件/文件夹具有显式mergeinfo,即使该文件/文件夹不相关,分支的每个后续合并也会更新该mergeinfo。这很烦人,因为每次合并都会在变更列表中引入越来越多的混乱情况。

为避免这种情况,仅合并到分支的“根”文件夹,例如“ /branches/maintenance2.x”。然后,“ / branches / maintenance2.x”下面的文件或文件夹均不应获取mergeinfo。遵循SVN书中合并建议

不幸的是,即使您仅在分支的“根”文件夹中合并,svn:mergeinfo复制单个文件和文件夹时,空属性仍会出现在各个文件和文件夹上,以指示它们没有收到与其兄弟姐妹相同的合并。

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

另外,您可以升级到Subversion 1.6。我已验证它可以解决此问题。它甚至似乎删除了早期版本为您添加的多余的mergeinfo。

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


12
我可以确认svn 1.6不能解决此问题。
Mike Miller 2009年

但是,我可以确认,只需手动删除所有额外的属性,就可以解决很多问题。
Mike Miller 2009年

简单地使用1.6并不能解决此问题,因为它实际上是预期的功能,尽管对于使用典型分支/树干模型的人来说可能有点烦人。
TheXenocide

如果您谈论的是1.6修复程序,那么这是否意味着我必须更新客户端,服务器或两者都更新?
Mathias F

1
我正在使用svn 1.7x,可以确认在根目录的直接子级上生成的mergeinfo仍然存在问题。
布莱斯·舒伯

14

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

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

7

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

在此处输入图片说明




1

我要补充一点,此错误的至少一部分已在Subversion 1.5.5中修复。从1.5.5 CHANGES文件

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

也就是说,SVN在1.5之前的版本中存在一个错误,该错误会创建未使用的并没有必要的mergeinfo条目,并且如果它们具有很多svn:mergeinfo属性,这很可能是原始发问者所想要的。


0

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

到目前为止,它还没有给我们带来任何问题。日志仍然可以在文件上使用,并且看起来是一样的(但是,后果自负!)。

哦,就在建立新分支之前,我们已经在行李箱上做到了。这样,我们可以从干净的开始。


0

我们的团队也遇到了这个问题,这使整个合并过程有些混乱。阅读此内容后,我尝试从多个文件中删除svn:mergeinfo属性,并且在进行一些进一步的测试后,它似乎解决了问题。


“我尝试从许多文件中删除svn:mergeinfo属性”-如何?和哪些文件?
路加福音

0

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

我想更改它……但是现在,如果您想将一个分支与另一个分支合并,则会得到少数几个您更改过的文件,然后有1000个文件在构建机器上更改过。因此,我们一直在进行“目标”合并,有时一次是一个文件。尤其是对于具有合法更改(例如,包含额外单元)的.dpr或.bdsproj文件。现在我知道发生了什么事,因此我希望可以制止这种疯狂。

感谢堆栈溢出!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.