11

svn リポジトリで認識されていない、作業コピー内のすべてのファイルを削除したいと考えています。

まるでクリーンなチェックアウトを行ったかのように効果的ですが、すべてのファイルを再ダウンロードする必要はありません。

私がこれに最も近いと思うのは...

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

しかし、これは不格好なようで、出力の不一致によりsvn外のディレクトリが削除される可能性があるため、完全には信頼できません。

「svn export」は、パッケージ化するためにソースをクリーンアップしていないため、私が探しているものではありません。ほとんどのクラフトを削除したいだけです (*.pyc、*.orig、*.rej、svn-commit.tmp、* .swp)。

きれいなチェックアウトを行う以外に、これを行うためのより良い方法はありますか?

4

5 に答える 5

21

ここに掲載されているほとんどのソリューションは、空白を含むフォルダーを処理できません。これが、これを使用する理由です。

svn status --no-ignore | grep '^[?I]' |  sed "s/^[?I] //" | xargs -I{} rm -rf "{}"
于 2011-06-29T22:13:18.750 に答える
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
于 2010-12-23T03:40:23.507 に答える
3
svn status --no-ignore | grep '^[?I]' | awk '{print $2}' | xargs rm -rf

説明させてください。

リポジトリ内のファイルのステータスを取得し、それらを 1 つずつ標準出力に出力して配列に出力します

svn status

これには、通常 svn によって無視されるように設定されたファイルが含まれます

--no-ignore

? のいずれかを含むマッチ ライン またはステータスとしてのI。私は無視されたファイルを意味し、?svn の管理下にないファイルを意味します。

| grep '^[?I]'

これは、ファイル名である配列の2番目の変数を出力します

| awk '{print $2}'

これにより、出力されたファイル名を持つファイルが削除されます

| xargs rm -rf

乾杯、ループ

于 2011-01-06T10:17:58.390 に答える
2

これを使って:

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

commandlinefuから取得します。

于 2010-12-23T03:34:06.633 に答える
-2

読み取り専用属性を持たないすべてのファイルを削除しますか? 事前にチェックアウトしていないことを確認してください...

于 2010-12-23T03:15:05.397 に答える