如何避免在子文件夹上出现svn:mergeinfos?

9
我们试图只在根分支文件夹上保留“svn:mergeinfo”属性。然而,我们发现它会悄悄地出现在子文件夹中。我们已经能够确定一些可能的原因:
  1. 在repo-browser中移动文件夹
  2. 在IntelliJ中移动和/或重命名包
  3. 使用旧的svn客户端
有人可以提供一个清单,告诉我们为了避免意外创建这些属性,我们不应该做哪些事情吗?
我们使用的工具是IntelliJ 8(即将更新到9),Ankh,TortoiseSVN和SlikSvn。
4个回答

11

不幸的是,旧的svn客户端会执行此操作,而基于这些旧版本svn的任何工具也都无法正常工作。解决此问题的唯一方法是在提交之前删除已创建的svn:mergeinfo条目。由于大多数人不知道它们已被创建,所以强制执行的唯一真正方法是使用pre-commit钩子,或者简单地执行以下操作:

svn propdel --recursive svn:mergeinfo $ROOT/*

现在和然后清理它们。在执行此操作时要小心,因为它会破坏您已经完成的任何部分合并的记录,因此只有当您真的不做部分合并时才应该这样做。提问者不这样做,我们的环境也不这样做。

问题在更新的svn客户端中得到解决,因此问题应该逐渐消失,但在您的工作流程中的所有工具被替换之前可能需要一些时间。

根据对这个问题的另一个回答的解释,快速说明导致问题的原因。当您执行工作副本移动或删除时,早于1.5.5的svn客户端会创建一个虚假的svn:mergeinfo条目。这是在svn 1.5.5中得到解决


这会不会破坏现有的合并信息,还是那里的合并信息是多余的? - Sander Rijken
1
在我们的情况下,合并信息是多余的。但你说得对,它会破坏你已经完成的任何部分合并信息。 - Paul Wagland
更新答案以提及此问题,并描述问题及其解决时间。 - Paul Wagland

1
我们编写了一个 SVN 钩子/触发器,它会简单地拒绝在非主干上提交 svn:properties。从那以后我们再也没有回头看过。

你能分享一下钩子脚本吗? - Winston Smith
@WinstonSmith - 我已不在同一家公司工作,因此无法访问该钩子。如果这对您非常重要,我可以尝试打听一下,但实现起来应该非常简单(如果不是,请在这里提问如何实现)。 - ripper234

0

我无法提供这样的列表。 我建议您使用svn钩子,记录导致文件夹属性更改的用户操作, 并根据您的工作流程适当地发出警告或拒绝该提交。


0

对子文件夹或个别文件执行合并操作会导致这种情况发生,而且它本应该如此,因为它必须记录合并信息。

最好的方法是在主要级别上执行合并,并在需要选择性地应用它时,还原您不想合并的更改,然后提交。


我甚至没有在子文件夹上进行任何合并,就已经获取到了这个属性。 - ripper234
谁给我点了踩,请说明原因?如果您希望合并信息仅在主级别显示,则不合并子级别非常重要。 - Sander Rijken
1
我没有给你的帖子点踩,但是你说的是正确的,问题在于复制操作也会生成这些条目。这个问题在1.5.5版本中得到了修复(不为wc-wc移动或复制创建合并信息(r34184,-585))。 - Paul Wagland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接