不注意だったと思います。
svn add
を使用してsvnに多数のファイルを追加した後、不要なファイルがいくつか追加されたので、rm
を使用してそれらを削除しました。
コミットにファイルがないため、コミットできなくなりました。 svn cleanupを試しましたが、役に立ちませんでした。
私の現在の作業オプションは、すべての.svnディレクトリを手動で削除することですが、それは間違っているようです。
私が理解しているように、あなたはこの状況にあります:
$ touch foo
$ svn add foo
A foo
$ rm foo
$ svn ci
svn: Commit failed (details follow):
svn: 'foo' is scheduled for addition, but is missing
だからそれを修正するにはこれを行います:(Linusに感謝します!)
$ svn revert foo
Reverted 'foo'
またはあなたはこれを行うことができます:
$ touch foo
$ svn delete --force foo
ファイルごとに、問題なくチェックインできるはずです。
サブフォルダーとファイルが含まれるフォルダーを追加した場合は、コミットする前にフォルダーを削除しました。この場合、次のように実行できます。
$ svn revert <Deleted Folder Name> --depth infinity
これは実際には@GonzaloMateoのわずかに変更されたバージョンであり、私の問題を解決しました。
svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity
複数のファイルが削除された複数のディレクトリがある場合は、次のコマンドが役立ちます。
_svn st | grep '!M' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert
_
最初に、元に戻す予定のファイルをリストすることをお勧めします。最後のパイプsvn st | grep '!M' | sed 's/!M \(.*\)$/"\1"/'
を削除することでそれを行うことができます。
ステップバイステップのコマンドの説明:
svn st
_-追加および不適切に削除された _!M
_記号の付いたファイルを一覧表示しますgrep '!M'
_ _!M
_の行を検索しますsed 's/!M \(.*\)$/"\1"/'
これは、スペースを含む_!M
_を取り除くために使用されます。また、ファイル名が引用されるため、ファイルにスペースが含まれているかどうかを心配する必要はありません。xargs svn revert
_これにより、リストされているすべてのファイルが元に戻ります。もし、あんたが svn add X
ファイルですが、コミットしていない場合は、後でそのファイルを削除する(コミットしない)ことにします。あなたは単にあなたを元に戻すべきですsvn add X
コマンドとsvn revert X
。
次に、まだコミットされていない追加を「元に戻し」ます。
これは私の問題を解決しました
svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity
注意すべきことの1つは、上記のコードは最新の追加に対してのみ機能するということです。したがって、エラーが発生した場合は、別の_svn ci
_を実行してから、上記のコードを再度実行します。次に、すべての問題を元に戻すまで、もう一度_svn ci
_します。
ボーナス:エイリアスを追加します(これはOh-My-ZSH Zsh Shell用です)
# SVN revert everything like reset hard alias sra="svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity"
これでsra
つまりSVN Revert Allであなたの生活が楽になります。