清理svn checkout(删除非svn文件)

时间:2010-12-23 03:09:24

标签: svn svn-checkout

我想删除工作副本中svn存储库中未知的所有文件。

有效地就好像我刚刚结账一样,但我不需要重新下载所有文件。

最接近我认为是......

rm -rf `svn st | grep "^?" | cut -d" " -f8`

但是这看起来很笨拙而且我并不完全信任它,因为输出的不一致可以消除svn之外的dirs。

“svn export”不是我想要的,因为我没有清理源码来打包它,我只想删除cruft(* .pyc,* .orig,* .rej,svn-commit。 tmp,* .swp)。

除了打扫干净外,还有更好的方法吗?

5 个答案:

答案 0 :(得分:19)

此处发布的大多数解决方案无法处理带有空格的文件夹。这就是我们使用这个的原因:

svn status --no-ignore | grep '^[?I]' |  sed "s/^[?I] //" | xargs -I{} rm -rf "{}"

答案 1 :(得分:5)

http://www.cuberick.com/2008/11/clean-up-your-subversion-working-copy.html

  

当我希望我的工作副本与回购相同时,我会这样做:

 svn st | awk '{print $2}' | xargs rm -rf
  

这将删除与存储库不同步的所有文件。然后只需更新即可恢复已删除的内容并获取最新信息。

svn up
  

...确保您没有编辑或添加!更安全的命令可能是:

svn st | grep '?' | awk '{print $2}' |xargs rm -f
  

......被忽略的文件怎么样? E.g。

svn st --no-ignore
svn st --no-ignore | awk '{print $2}' | xargs rm -rf
svn st --no-ignore | grep '?' | awk '{print $2}' |xargs rm -f

答案 2 :(得分:3)

svn status --no-ignore | grep '^[?I]' | awk '{print $2}' | xargs rm -rf

让我解释一下。

获取存储库中文件的状态,并逐个将它们打印到标准输出到数组

svn status

这包括svn

通常会忽略的文件
--no-ignore

匹配包含?的行?或者我作为一个地位。我的意思是一个被忽略的文件?表示不受svn控制的文件。

| grep '^[?I]'

这将打印数组中的第二个变量,即文件名

| awk '{print $2}'

这将删除包含打印文件名的文件

| xargs rm -rf

干杯, 环

答案 3 :(得分:2)

使用此:

svn status --no-ignore | grep ^I | awk '{print $2}' | xargs rm -rf

commandlinefu获得。

答案 4 :(得分:-2)

删除每个没有readonly属性的文件?确保你没有在事前检查过......