1

当我递归地清理 SVN 中的文件夹时,我有一些不属于 SVN 的文件(例如svn status,用 列出它们?)。所以,我的问题是:如何告诉 SVN 删除所有这些文件,以便我的 svn 状态返回空,例如与 SVN 服务器相同。

一种方法是:

rm -r /path/to/localcopy/somefolder && svn update /path/to/localcopy/somefolder

但这是不可接受的,因为某个文件夹包含很多我不想每次都签出的文件。

4

1 回答 1

1

编辑:更新以使用包含空格的文件路径,换行符除外。在 Mac OS X 上的 bash 3.2.17 中测试。

也看到这些 问题

#!/bin/bash

OLD_IFS=$IFS
IFS=$'\n'
for path in $(svn st | awk '/^\?/ { $1=""; print substr($0, 2) }'); do
    rm -r "$path"
done
IFS=$OLD_IFS

让我们分解一下。

OLD_IFS=$IFS
IFS=$'\n'

保存$IFS(shell 的输入字段分隔符)的旧值并将值更改为换行符。这将让我们循环遍历包含空格的内容,只有在我们遇到换行符时才进行下一次迭代。

for path in $( ...

循环遍历内部命令替换的结果$( )

svn st | awk '/^\?/ ...

svn st打印(与 相同svn status)中以 开头的所有行?

{ $1=""; print substr($0, 2) }'

删除?和前导空格,只在工作副本中留下未版本化的路径。

    rm -r "$path"

-r删除路径,如果路径是目录则传递。无需检查路径是否为目录,因为未版本控制的目录不能包含版本控制的内容。

IFS=$OLD_IFS

恢复 shell 的输入字段分隔符的值。

于 2013-09-27T01:36:57.383 回答