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

时间:2009-12-31 08:57:47

标签: svn tortoisesvn intellij-idea ankhsvn mergeinfo

我们尝试仅将'svn:mergeinfo'属性保留在根分支文件夹中。但是,我们一直看到它爬进子文件夹。我们已经找到了一些可能的原因:

  1. 在repo-browser中移动文件夹
  2. 在IntelliJ中移动和/或重命名包
  3. 使用旧的svn客户端
  4. 任何人都可以提供我们不应该做的事情列表,以避免意外创建这些属性吗?

    我们使用的工具是IntelliJ 8(即将推出9款),Ankh,TortoiseSVN和SlikSvn。

4 个答案:

答案 0 :(得分:11)

不幸的是,旧的svn客户端就是这样做的,任何基于这些旧版本的svn的工具也都会被破坏。解决此问题的唯一方法是在提交之前删除创建的svn:mergeinfo条目。由于大多数人都不知道它们是被创建的,因此唯一真正的强制执行方式是预先提交挂钩,或者只是简单地执行:

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

不时地清理它们。这样做时要小心,因为它会破坏你已经完成的部分合并的任何记录,所以如果你真的不做部分合并,你应该真的这样做。提问者不会,也不会在我们的环境中。

问题在较新的svn客户端中得到修复,因此问题应该慢慢消失,但在更换工作流程中的所有工具之前可能需要一些时间。

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

答案 1 :(得分:1)

我们写了一个SVN钩子/触发器,它简单地拒绝了对非trunk的svn:properties的提交。我们从未回头。

答案 2 :(得分:0)

我无法提供这样的清单。 我建议你使用svn hook 记录导致文件夹属性更改的用户操作 并发出警告或拒绝该提交, 根据您的工作流程做任何适当的事情。

答案 3 :(得分:0)

对子文件夹或单个文件执行合并会导致这种情况,并且应该导致它,因为它必须记录合并信息。

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