SVN作業ディレクトリ内のすべての変更を削除するにはどうすればよいですか?


195

SVN作業ディレクトリがあります。そのディレクトリに変更を加えたところ、に表示されましたsvn status。しかし、そこにあるすべての変更を削除し、コマンドラインを使用してトランクからすべてを取得する方法はありますか?

回答:


274
svn revert -R .
svn up

これにより、現在のディレクトリとその下のすべてが再帰的に元に戻され、最新バージョンに更新されます。


2
これは外観では機能しないことに注意してください(一見無視されているようです)。
cic 2015年

86

私は他の人々の答えを組み合わせてこの解決策を考え出しました:

通常のローカルSVNの変更を元に戻す

svn revert -R .

その他の変更をすべて削除し、スペースなどを含むファイル/フォルダーの削除をサポートします。

svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf

SVNから最新のファイルを取得することを忘れないでください

svn update --force

Shaizeに感謝します。これは最もエレガントなsedです。...これまでに見たパイプです:)特に無視についても注意してください。
2015

魅力のように機能します。ありがとう!
NiiloKeinänen19年

28
svn revert -R .
svn cleanup . --remove-unversioned

これは、など*の.classファイルは削除されません
Trismegistos

2
無視されたファイルも削除したい場合svn cleanup . --remove-ignored
Kip

14

変更がない場合は、常に徹底的および/または怠惰にして行うことができます...

rm -rf *
svn update

しかし、実際には、nuke-from-spaceオプションが必要なものであることが本当に確実でない限り、それを行わないでください。これには、すべてのビルドクルーフ、一時ファイル、およびSVNが無視するものも含まれるという利点があります。

より正しい解決策は、revertコマンドを使用することです。

svn revert -R .

-Rを指定すると、subversionは再帰し、現在の作業ディレクトリ内およびその下のすべてを元に戻します。


私はこのトリックをよく使用しましたが、メタデータがWCルートにのみ保存されるSVN 1.7では、これは以前のクリーンなソリューションではなくなりました。たとえば、削除されたファイルは削除されたままになります。
Bart van Heukelom 2013年

8
svn nuke-from-space
Jason Swett 2014年

9

ここでの答えはどれも、私が望んでいたものとまったく同じではありませんでした。これが私が思いついたものです:

# Recursively revert any locally-changed files
svn revert -R .

# Delete any other files in the sandbox (including ignored files),
# being careful to handle files with spaces in the name
svn status --no-ignore | grep '^\?' | \
    perl -ne 'print "$1\n" if $_ =~ /^\S+\s+(.*)$/' | \
    tr '\n' '\0' | xargs -0 rm -rf

Linuxでテスト済み。Cygwinで動作する可能性がありますが、xargsを'\0'空白の代わりに基づいて分割できるようにするGNU固有の拡張機能に依存しています(私は信じています)。

上記のコマンドの利点は、サンドボックスをリセットするためにネットワークアクティビティを必要としないことです。以前とまったく同じものが得られ、すべての変更失われます。(誰かがこのコードを破壊したことで私を非難する前の免責事項);-)

このスクリプトは、いくつかのテストを実行した後にクリーンビルドが確実に実行されるようにしたい継続的インテグレーションシステムで使用します。

編集:これがSubversionのすべてのバージョンで機能するかどうかはわかりません。svn statusコマンドが常に一貫した形式であるかどうかは明確ではありません。このような包括的なrmコマンドを使用するコマンドと同様に、自己責任で使用してください。



5

次のコマンドを使用して、ローカルの変更をすべて元に戻すことができます。

svn st -q | awk '{print $2;}' | xargs svn revert

svn revertのエラーメッセージ「引数が足りません」
循環

4
svn status | grep '^M' | sed -e 's/^.//' | xargs rm

svn update

変更されたファイルを削除します。ファイルやディレクトリが追加された可能性があるときに、復帰に問題があったことを覚えているようです。



0

Windowsを使用している場合、次のforループは、ワークスペースに加えられたすべてのコミットされていない変更を元に戻します。

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)

コミットされていないすべての変更とバージョン管理されていないオブジェクトをすべて削除する場合は、2つのループが必要です。

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)
for /F "tokens=1,*" %%d in ('svn st') do (
  svn rm --force "%%e"
)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.