属性冲突svn:忽略?

时间:2013-06-07 11:58:23

标签: svn

如何解决svn:ignore属性的冲突?

我使用以下命令忽略了本地存储库中的一些文件:

svn propedit svn:ignore .

当我跑svn update时,我看到了以下冲突:

Conflict for property 'svn:ignore' discovered on ''

当我运行svn diff时,我会看到以下差异:

Property changes on: .
___________________________________________________________________
Modified: svn:ignore
   -

   + cache/*
log/*

如何解决此冲突?我想删除svn ignore的本地修改。

2 个答案:

答案 0 :(得分:6)

文件属性就像Subversion中文件的内容一样。他们也需要修改提交并且可能存在冲突。

执行svn status,您会看到更多关于冲突的描述。有三种可能性:

  • 传入编辑和本地编辑:您和之前的版本都编辑了此属性。应该能够合并。
  • 传入添加和本地添加:您添加了此属性,其他人也添加了此属性。
  • 传入删除和本地编辑或添加:修订战争 - 此属性位于存储库的先前版本中,该人员删除了此属性。你已经编辑过了。

有两种方法可以解决这个问题:

  • 对此属性进行还原。如果您添加了它,请在其上执行svn propdel --force。因为这是一个目录,所以不要执行svn revert .,因为您将还原此目录中的所有更改。你不想那样做。只需还原此属性即可。您可以通过执行svn revert --depth=empty来仅还原属性。我从未尝试过。
  • 做一个svn resolved .。这将标记.中的冲突已解决。它不一定已经解决,但您至少可以将其标记为并在以后修复它。

如果您还原了属性更改并以此方式解决了冲突,请执行svn update并重新编辑该属性。如果您对冲突做了svn resolved .,那么请执行svn propget -rPREV svn:ignore .来查看以前版本的值。这样,您可以查看先前修订版的设置,并将其考虑在内。这可能是一个简单的订购问题。例如,先前的修订版将其设置为:

target
build.properties

您将其设置为:

build.properties
target

最后,两者都是相同的值。或者,可能是以前的版本在那里有一个你没有的文件名目录。例如,它被设置为:

*.log

并将其设置为:

build.properties
target

您可能希望将其设置为:

build.properties
target
*.log

首先解决冲突,执行更新,然后将其设置为您需要的值。

答案 1 :(得分:1)

svn:ignore文件夹的属性,其中包含您设置为要忽略的文件。因此,该文件夹表现出冲突。

计划A 最简单的解决方案是删除包含文件夹,然后执行SVN更新以恢复存储库中存在的更新。

计划B 如果由于某种原因删除文件夹不是您的选项(例如,如果您要保留一些已修改的文件),则重命名该文件夹(例如,重命名为yourfolder-TEMP)并再次执行SVN更新。这将重新创建yourfolder,并且svn属性中没有冲突。现在将您需要的文件从yourfolder-TEMP复制回yourfolder,然后在您确信已保留所需内容后删除旧文件夹。