【问题标题】:Clean an svn checkout (remove non-svn files)清理 svn 结帐(删除非 svn 文件)
【发布时间】:2010-12-23 03:09:23
【问题描述】:

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

就好像我刚刚完成了一个干净的结帐,但我宁愿不必重新下载所有文件。

我最接近的想法是......

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

但这看起来很笨拙,我并不完全相信它,因为输出不一致可能会删除 svn 之外的目录。

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

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

【问题讨论】:

标签: svn svn-checkout


【解决方案1】:

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

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

【讨论】:

  • 伟大的思想都一样。这是完成这一壮举的完美命令行。
【解决方案2】:

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

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

 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 将无法找到文件/文件夹。
【解决方案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

干杯, 循环

【讨论】:

    【解决方案4】:

    使用这个:

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

    commandlinefu获得。

    【讨论】:

      【解决方案5】:

      删除所有没有只读属性的文件?确保您没有事前检查...

      【讨论】:

      • thejohndonson to the rescue ))) 这就是问题所在 - 如何自动执行此操作:-))
      • SVN 从什么时候开始对结帐中的所有文件应用只读属性?我认为这种不当行为属于 TFS 领域。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多