3

如果您有一个带有 svn:external 链接的目录(我们在工作中广泛使用),那么每当您在分支之间合并该目录时,目录中的每个文件都会获得一个新的 svn:merge-info 属性。

我猜这是因为外部链接没有被合并更改,所以 svn 将它计算为它自己的子树(与为什么 svn 合并没有更改的分支会导致未修改的文件修改 svn相关,但不是同一个问题:mergeinfo 属性)。

这导致实际更改被隐藏在所有合并信息属性更改中,从而使更改集变得很大并且几乎不可读。(我们有一个具有足够合并历史和外部的分支,合并一行更改可能会导致 500Kb 差异)。

到目前为止,我们唯一能做的就是在提交之前使用 svn:external 链接从子树中删除合并属性。这阻止了使用 --reintegrate 并且意味着如果它们发生我们无法跟踪真正的子树合并。

有没有人有更好的解决方案?

4

1 回答 1

3

svn:merge-info 不应该被阅读,但我理解你的问题。

一种解决方案可能是升级到 1.7(服务器和客户端)。在 1.7 中对 merge-info 进行了一些工作,可能会对您有所帮助。

听起来您已经了解合并信息,但无论如何这里有一些额外的信息。

节点(文件或目录)上的合并信息从它的父级(目录)一直继承到您的工作副本,然后再到存储库。svn 试图只在需要它的节点上写入合并信息,即它与它的父节点不同的地方。

为了防止节点上的合并信息,请确保尽可能靠近存储库根目录进行合并,如果发生任何其他合并,则在尝试从上层目录合并这些漏洞之前。这不会导致任何更改,但会填补合并信息中的空白,从而使合并信息省略更有效。

我发现某些版本的 svn 在合并时不能按预期工作。1.6.6(ubuntu 10.04 拥有的那个)在进行部分合并时效果不佳。

于 2011-11-18T22:57:47.557 回答