17

我想恢复 SVN 工作副本中的目录和所有子目录,以便它们与存储库匹配,但我不想触及这些目录中的任何文件。

我的一个 SVN 应用程序递归地在我的工作副本中的每个目录上设置一个 SVN 属性,但我想恢复这些更改以停止它突出显示它们并尝试将更改提交给 SVN 属性。简单地更改它以匹配 HEAD 是行不通的。

有任何想法吗?我已经阅读了各种 SVN 资源,但似乎没有一个可以处理这种极端情况。

4

4 回答 4

104

适用于所有平台:

svn revert . --recursive

(请注意,这将恢复所有内容,而不仅仅是目录。)

于 2012-06-27T20:42:28.287 回答
9

您可以find结合使用svn revert

find . -type d | grep -v .svn | xargs svn revert

-R除非您使用该选项(相当于),否则这不会触及目录中的任何文件--depth=infinity

于 2011-01-27T16:02:04.637 回答
2

首先,在安全的地方制作一份工作副本。:)

您可以使用以下命令编辑 svn 工作副本的属性:

REM Delete all mergeinfo properties recursively
svn propdel svn:mergeinfo -R
于 2011-01-27T15:59:59.317 回答
1

在 Windows 上,您可以从命令行执行以下操作:

for /d /r %i in (*) do svn revert %i

如果您从批处理文件中调用它,请%%i改用。 请先备份!

这个命令很脏,会遍历所有目录,甚至是未修改的目录或不在svn. 您可以使用类似这样的 Ruby 脚本以更简洁的方式进行操作:

`svn st`.split("\n").grep(/^ M\s+(.*)/) { $1 }.find_all { |i| File.directory? i }.each do |i|
  system "svn revert #{i}"
end
于 2011-01-27T16:28:38.123 回答