我想恢复 SVN 工作副本中的目录和所有子目录,以便它们与存储库匹配,但我不想触及这些目录中的任何文件。
我的一个 SVN 应用程序递归地在我的工作副本中的每个目录上设置一个 SVN 属性,但我想恢复这些更改以停止它突出显示它们并尝试将更改提交给 SVN 属性。简单地更改它以匹配 HEAD 是行不通的。
有任何想法吗?我已经阅读了各种 SVN 资源,但似乎没有一个可以处理这种极端情况。
我想恢复 SVN 工作副本中的目录和所有子目录,以便它们与存储库匹配,但我不想触及这些目录中的任何文件。
我的一个 SVN 应用程序递归地在我的工作副本中的每个目录上设置一个 SVN 属性,但我想恢复这些更改以停止它突出显示它们并尝试将更改提交给 SVN 属性。简单地更改它以匹配 HEAD 是行不通的。
有任何想法吗?我已经阅读了各种 SVN 资源,但似乎没有一个可以处理这种极端情况。
适用于所有平台:
svn revert . --recursive
(请注意,这将恢复所有内容,而不仅仅是目录。)
您可以find
结合使用svn revert
:
find . -type d | grep -v .svn | xargs svn revert
-R
除非您使用该选项(相当于),否则这不会触及目录中的任何文件--depth=infinity
。
首先,在安全的地方制作一份工作副本。:)
您可以使用以下命令编辑 svn 工作副本的属性:
REM Delete all mergeinfo properties recursively
svn propdel svn:mergeinfo -R
在 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