回答:
TortoiseSVNの使用:
svn cleanup --remove-unversioned --remove-ignored .
svn status --no-ignore | grep '^[I?]' | cut -c 9- | while IFS= read -r f; do rm -rf "$f"; done
これには次の機能があります。
--xml
オプションを使用して結果のxml出力を解析する以外にできることは多くありません)。svn status
ファイル名の前に他のステータス文字が出力されても機能します(ファイルが追跡されないため、念のため...)svnclean
以下を含むという名前のシェルスクリプトを使用します。
#!/bin/sh
# make sure this script exits with a non-zero return value if the
# current directory is not in a svn working directory
svn info >/dev/null || exit 1
svn status --no-ignore | grep '^[I?]' | cut -c 9- |
# setting IFS to the empty string ensures that any leading or
# trailing whitespace is not trimmed from the filename
while IFS= read -r f; do
# tell the user which file is being deleted. use printf
# instead of echo because different implementations of echo do
# different things if the arguments begin with hyphens or
# contain backslashes; the behavior of printf is consistent
printf '%s\n' "Deleting ${f}..."
# if rm -rf can't delete the file, something is wrong so bail
rm -rf "${f}" || exit 1
done
IFS
前の状態に戻す必要はありません。を実行するとVARNAME=value command
、への割り当てはの実行中value
にVARNAME
のみ適用されますcommand
(には適用されないいくつかの例外がありますread
)。詳細については、POSIX仕様とこのPOSIXバグレポートを参照してください。
私はこれが古いことを知っていますが、誰かがそれにつまずいた場合に備えて、新しいバージョン(1.9以降)のsvn support --remove-unversioned
を使用しsvn cleanup . --remove-unversioned
ます。
https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
svn cleanup . --remove-ignored
このワンライナーはあなたを助けるかもしれません:
$ svn status | grep '^?' | awk '{print $2}' | xargs rm -rf
注意して使用してください!
svn status --no-ignore
無視されたファイルをうまくキャプチャするために使用できます。
Powershellを使用してYanal-Yves Fargiallaとgimpfの回答を変更する(ただし、Stackoverflowによって元の投稿にコメントすることはできません):
powershell -Command "&{(svn status --no-ignore) -match '^[\?i]' -replace '^.\s+' | rm -recurse -force}
これは、カラット( "^")を追加して行の先頭を指定し、文字 "i"を含むすべてのファイルの一致を回避します。また、-recurseと-forceのフラグをrmに追加して、このコマンドを非インタラクティブにし、スクリプトで使用できるようにします。
PowerShellを使用:
(svn status --no-ignore) -match '[?]' -replace '^.\s+' | rm
コマンドラインから:
powershell -Command "&{(svn status --no-ignore) -match '[?]' -replace '^.\s+' | rm}"
-match '[\?i]' -replace '^.{8}'
代わりに使用することをお勧めします。これは、ファイル名が空白で始まっていても正しく機能し、無視されたファイルも削除します。
code
@(svn status --no-ignore)-match '[\?i]' -replace '^。{8}' | rm `。この投稿の
powershell -Command "&{(svn status --no-ignore) -match '[\?i]' -replace '^.{8}' | remove-item -force -recurse}"
TortoiseSVNの使用:
本当にすてきでクリーンなソリューションではありませんが、(Windowsで)私が知っている最速の方法です。
無視されたファイルのヒントを提供してくれたpkhに感謝します。
これは他の回答と似ていますが、実際には無視されたファイルを取得します(REの「I」に注意してください)。
rm -rf `svn status --no-ignore | grep '^[\?I]' | sed 's/^[\?I]//'`
Windowsのコマンドラインからはできないと誰かが言った。
ブル。
for /f "tokens=2 delims= " %I IN ('svn st --no-ignore ^| findstr /R "^[I?]"') DO (DEL /S /F /Q /A:H "%I" & rmdir /S /Q "%I")
それを1行で実行し、単一のGNUツールを必要としません。:)
for /f "tokens=2 delims= " %%I IN ('svn st --no-ignore ^| findstr /R "^[I?]"') DO (DEL /S /F /Q /A:H "%%I" & rmdir /S /Q "%%I")
%%
オーバー%
Linuxシステムの場合、SVNコマンドラインだけでは削除できません(ただし、GUIツールについては不明です)。
http://www.guyrutenberg.com/2008/01/18/delete-unversioned-files-under-svn/
もう1つの(残忍な)メソッドは、変更をコミットし、フォルダーからすべてを削除して、もう一度チェックアウトすることです。