Svn还原所有属性更改

时间:2010-06-21 16:21:59

标签: svn

我有一个svn工作副本,我试图将几个最近的修订版反向合并到。在我改变主意之前,我在合并之前取消了合并。现在,我的工作副本对大多数文件的祖先相关属性的更新有几千个“更改”。我有大约10个混合实际代码更改的文件,我不想手动分开。

我是否可以在不影响内容更改的情况下还原所有属性更改?

6 个答案:

答案 0 :(得分:32)

svn revert `svn status | grep '^ M' | sed 's/^ M \+//g'`

答案 1 :(得分:18)

如果使用'--depth empty'选项,则只会将更改还原到命令行中明确指定的路径,因此,如果指定所有具有属性更改的目录,但是无需更改内容的文件保持。

e.g。如果您的目录'foo'包含不需要的属性更改,但'foo'中的文件'bar',则以下内容应将mod保留为'bar',但还要恢复'foo'上的属性更改。

$svn revert --depth empty foo

答案 2 :(得分:9)

事实证明,Tortoise SVN可以很好地完成这项工作。在提交对话框中,您可以按“文本状态”或“属性状态”对“已修改”文件进行排序。我只是按文本状态排序,然后还原所有具有“正常”“文本状态”的“已修改”文件。

答案 3 :(得分:0)

您可以提交更改,然后从该修订版还原属性更改:

svn merge -c -REV -depth empty

其中REV是您要还原属性更改的修订

答案 4 :(得分:0)

使用PowerShell还原所有属性更改。

> @(svn status) -match '^ M' | `
>>> % { ($_ -split 'M\s+')[1] } | `
>>> % { svn revert --depth empty $_ }

归功于 Jerome Jaglale TheJuice 的一般方法。

请注意,反引号`符号表示新行。

答案 5 :(得分:-3)

我只是将其他地方的实际代码更改复制/备份10个文件,只需svn revert -R整个项目,然后复制10个文件。