如何从存储库中删除所有已删除的文件?
我有一个脚本,我添加所有新的文件之前提交我的工作副本到我的存储库与此行:
svn status | grep ^\? | awk '{print $2}' | xargs svn add 我现在想添加一行,从存储库中删除我的工作副本中的所有已删除的文件。 换句话说,我不能一一指定它们,我需要用svn状态来检测它们,然后自动删除它们。 但是这条线不起作用。
 svn status | grep ^\! | awk '{print $2}' | xargs svn --force delete 
正如你所看到的,我已经取代了
  “ ? ”用“ ! ”和 
  “ add ”与“ – --force delete ” 
你能告诉我为什么它不起作用吗?
PS。 我知道这是一个危险的程序。 我已经讨论过了。 谢谢
谢谢
我只是试过这个,它完美的作品。
 $ svn st | grep '^!' | awk '{print $2}' | xargs svn delete --force D groups.pl D textblock.pl 
你的文件中是否有空格?
等一下!! 我看到了这个问题。 你有:
 svn --force delete 
并不是:
 svn delete --force 
  --force是delete命令的参数,而不是svn命令。 
我也find了另一个解决scheme。
 svn status | grep '^\!' | sed 's/! *//' | xargs -I% svn rm % 
我在http://donunix.blogspot.de/2009/02/svn-remove-all-deleted-files.html上看过;
 svn status | grep '^!' | sed 's/! *//' | xargs -d '\n' svn delete --force 
该解决scheme适用于具有空格和特殊字符的文件名。
-   svn status– 列出所有更改,删除的文件被标记为!
-  grep '^!'– 提取以!开头的行 (即删除的文件)
-  sed 's/! *//'sed 's/! *//'– 删除!开头的-char,后面的空格
-   xargs -d '\n'– 将每个input行(包括空格和特殊字符)作为单独的参数对待,并将它们传递给svn delete --force
那么添加你可以简单地使用
 svn add --force . 
要么
 svn --force add . 
它会做同样的事情:添加除了匹配svn:ignore模式的所有未版本控制的文件
一个使用perl的方法是:
 svn st | perl -ne 'print "$1\n" if /^\!\s+(.*)/' | xargs svn rm 
这应该也适用于文件名中的空格字符。
编辑:改进的正则expression式