如何从存储库中删除所有已删除的文件?

时间:2011-01-05 20:21:28

标签: svn

我有一个脚本,我先添加所有新文件,然后用这一行将我的工作副本提交到我的存储库:

svn status | grep ^\? | awk '{print $2}' | xargs svn add

我现在想添加一行从存储库中删除工作副本中的所有已删除文件。换句话说,我不能逐个指定它们,我需要用svn状态检测它们然后自动删除它们。但是这条线不起作用。

svn status | grep ^\! | awk '{print $2}' | xargs svn --force delete

如你所见,我已经取代了

?”与“!”和

add”与“--force delete

你能告诉我为什么它不起作用吗?

PS。我知道这是一个危险的程序。我已经讨论了所有这些。 感谢

感谢

5 个答案:

答案 0 :(得分:60)

我只是试过这个并且效果很好。

$ svn st | grep '^!' | awk '{print $2}' | xargs svn delete --force
D         groups.pl
D         textblock.pl

您的文件名称中是否有空格?

等待第二个!! 我看到了问题。你有:

svn --force delete

而不是:

svn delete --force

--forcedelete命令的参数,而不是svn命令。

答案 1 :(得分:41)

我也找到了另一种解决方案。

svn status | grep '^\!' | sed 's/! *//' | xargs -I% svn rm %

我在http://donunix.blogspot.de/2009/02/svn-remove-all-deleted-files.html

上看过了

答案 2 :(得分:7)

svn status | grep '^!' | sed 's/! *//' | xargs -d '\n' svn delete --force

该解决方案适用于包含空格和特殊字符的文件名。

  • svn status - 列出所有更改,已删除的文件标记为!
  • grep '^!' - 提取以!开头的行(即已删除的文件)
  • sed 's/! *//' - 删除! - 开头的字符和后面的空格
  • xargs -d '\n' - 将每个输入行(包括空格和特殊字符)视为单独的参数,并将它们传递给svn delete --force

答案 3 :(得分:2)

添加你可以简单地使用

svn add --force .

svn --force add .

它会做同样的事情:添加除svn匹配的所有无版本文件:忽略模式

答案 4 :(得分:2)

使用perl oneliner的方法是:

svn st | perl -ne 'print "$1\n" if /^\!\s+(.*)/' | xargs svn rm

这也适用于文件名中的空格字符。

编辑:改进的正则表达式