我有一个svn工作副本,我试图将几个最近的修订版反向合并到。在我改变主意之前,我在合并之前取消了合并。现在,我的工作副本对大多数文件的祖先相关属性的更新有几千个“更改”。我有大约10个混合实际代码更改的文件,我不想手动分开。
我是否可以在不影响内容更改的情况下还原所有属性更改?
答案 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个文件。