如何解决带有SVN属性的合并冲突?

41
这个问题困扰了我很长时间——如何正确解决在一个目录上设置的 SVN 属性中的合并冲突?例如,有两个开发人员正在一个项目上工作,其中 svn:ignore 被设置在某个目录上。如果这个属性被两个开发者修改了,那么当第二个开发者更新时,他们将看到一个合并冲突。
与文件合并冲突不同的是,在该目录下生成了一个名为 "dir_conflicts.prej" 的单个文件,第二位开发人员必须读取并手动更正它。通常,我最终会撤消本地副本的所有更改,然后使用 dir_conflicts.prej 中的信息手动重新设置这些属性。但是,当处理一个包含许多 URL 的 svn:externals 属性列表时(我们的许多项目都使用此功能),这样做非常麻烦。
肯定有更好的方法来解决这个问题——有人知道怎么做吗?
7个回答

11

在进一步研究后,我需要快速更新一下——无法轻松合并SVN属性。我的最初描述的方法(还原,从.prej文件中合并数据,设置属性,重新提交)似乎是处理这类问题的最佳方式。


不幸的是,我必须+1这个答案。我的回答涉及到svn:externals属性以及它使用中的反模式。这里不是详细讨论的合适场所,但我只是想在这里抱怨一下。 - FlipMcF

4

我曾遇到同样的问题。

我试图使用 Team->Edit Property Conflicts,但我的STS挂起并没有响应,因此我强制关闭了它。

可以通过 TortoiseSVN 解决此问题。

以下是我解决此问题的方法

  • 选择包含 dir_conflicts.prej 的文件夹
  • 右键单击 TortoiseSVN -> Resolve...
  • 然后它会要求解决属性冲突
  • 执行解决并保存

3
与此同时,在Eclipse+Subclipse(Indigo)中使用以下功能可以实现这一点:

团队->编辑属性冲突

(在具有冲突的svn:ignore属性的情况下进行了尝试)
此功能打开一个对话框,显示本地和存储库的属性版本,您可以复制并粘贴,然后使用团队->标记为已解决来解决冲突。

1

1
你是指提交/更新或分支合并时的合并冲突吗? SVN Book非常清楚svn:ignore属性:

Subversion不会假设工作副本目录中的每个文件或子目录都是用于版本控制的。必须使用svn add或svn import命令显式地将资源放置在Subversion的管理之下。

...

强制每个使用该存储库的用户将这些资源的模式添加到其运行时配置区域中不仅是一种负担,而且可能会与用户检出的其他工作副本的配置需求发生冲突。

0

我遇到了类似的冲突。我在文本编辑器中打开了dir_conflicts.prej文件,发现svn ignore list已经被更改。幸运的是,列表的内容没有变化,只是顺序改变了。所以在TortoiseSVN 1.9.3中,我只需右键单击文件夹,然后选择TortoiseSVN -> 解决冲突...即可解决冲突。


0

明确一点,SVN似乎使用dir_conflicts.prej文件来确定目录是否存在冲突。如果您打算手动解决冲突,只需删除dir_conflicts.prej文件,然后手动设置svn属性即可(当然,在删除它之前确保从.prej文件中获取所需内容!)


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