2010-06-21 100 views
25

我有一个svn工作副本,我试图反向合并一些最近的修订版本。在我改变主意之前,我在完成合并之前取消了合并。现在我的工作副本从更新到大多数文件的祖先相关属性有几千“更改”。我有大约10个具有实际代码更改的文件,其中我不希望手动分离。Svn恢复所有属性更改

有没有办法让我恢复所有的属性更改而不影响内容更改?

回答

9

原来,Tortoise SVN可以很好地做到这一点。在提交对话框中,您可以通过“文本状态”或“属性状态”对“已修改”文件进行排序。我简单地按文本状态排序,然后恢复所有具有“正常”“文本状态”的“已修改”文件。

+0

这也适用于恢复(我想象任何其他乌龟命令)。谢谢你的提示! – sam 2011-02-03 12:23:10

-3

我只是复制/备份其中10个文件,其中只有svn revert -R整个项目,然后复制10个文件。

+2

100多个文件呢? – Vanuan 2011-05-06 12:38:28

16

如果使用'--depth empty'选项,则只会将更改恢复为在命令行上明确指定的路径,所以如果指定了所有具有属性更改但没有内容更改您的文件的目录想保持。

例如如果你的目录'foo'有不需要的属性改变,但是'foo'里面的文件'bar',下面应该把mod保存为'bar',但是恢复'foo'的属性改变。

$svn revert --depth empty foo 
30
svn revert `svn status | grep '^ M' | sed 's/^ M \+//g'` 
+1

这对我很有效,虽然我不得不编辑这行以'svn'为前缀的电话 – 2012-01-23 14:20:25

+1

谢谢克里斯,我忘了替换我的bash别名:) – 2012-01-31 20:06:08

+2

您应该使用'^ M'而不是'M'。另外,像“MM”这样的文件如何改变相关的文字,但会丢弃属性更改? – calandoa 2013-10-07 17:15:10

0

您可以提交更改,然后恢复从该版本属性的变化:

SVN合并-c -REV -depth空

其中REV是要恢复的修订属性更改

0

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

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

感谢杰罗姆JaglaleTheJuice的一般方法。

注意倒勾`符号表示新行。