清理svn检出(删除非svn文件)

11

我想要删除工作副本中所有在svn仓库中未被追踪的文件。

实际上就像我刚刚干净地检出一样,但我不想重新下载所有文件。

我能找到的最接近的方法是...

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

但这种方法看起来有些笨重,我也不太信任它,因为输出的不一致性可能会删除svn之外的目录。

"svn export"不是我要找的,因为我没有清理源代码以打包它,我只想去除大部分垃圾文件(*.pyc,*.orig,*.rej,svn-commit.tmp,*.swp)。

除了进行干净的检出之外,还有更好的方法吗?


可能是重复的问题,参考 此链接 - rodion
(可能是重复的问题)请参考以下链接:自动删除Subversion未版本化的文件 - Bert F
5个回答

21

在这里发布的大多数解决方案都无法处理包含空格的文件夹。这就是我们使用这个的原因:

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

聪明人想法相似。这是实现这一壮举的完美命令行。 - Claude Houle

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

那忽略的文件呢?比如:

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

我很确定,如果文件名中有空格,使用 awk 命令将会失败,因为 awk 只会获取第二个“字段”,这可能只是一个文件/文件夹名称中的第一个单词。使用 rm 命令也会找不到文件/文件夹。 - Jonathan Komar

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

让我解释一下。

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

svn status

这包括通常被svn忽略的文件。

--no-ignore

匹配包含“?”或“I”状态的行。I表示被忽略的文件,“?”表示不受svn控制的文件。

| grep '^[?I]'

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

| awk '{print $2}'

这将删除具有打印文件名的文件。

| xargs rm -rf

欢呼, Loop

2
请使用以下代码:
svn status --no-ignore | grep ^I | awk '{print $2}' | xargs rm -rf

Obtained from commandlinefu.


-2

删除所有没有只读属性的文件?确保在此之前没有检出任何文件...


2
thejohndonson营救了))) 这就是问题所在 - 如何自动做到这一点 :-)) - zerkms
1
SVN 从何时开始在检出时给所有文件应用只读属性?我以为这种行为只会出现在 TFS 领地里。 - cdhowie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接