コミットする前にファイルをsvnに「追加解除」


200

再帰的なsvn add / commitを行っている最中に、適切な無視プロパティを持たないフォルダが含まれていました。現在、バージョンアップされた約100のバイナリファイルをアップロードしていますが、まだコミットしていません。

すべてのドキュメントを削除せずに、これを「元に戻す」最も簡単な方法は何ですか?

回答:


244

使用する svn revert --recursive folder_name


警告

svn revertデータ全体、つまりコミットされていない変更を破棄することを目的としているため、本質的に危険です。元に戻すと、Subversionはそれらのコミットされていない変更を取り戻す方法を提供しません

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.revert.html


12
これを拡張するにrevertは、リビジョンを指定せずに、指定したファイルの追加/削除のスケジュール変更を含む、最後のチェックアウト以降に発生した変更を元に戻します。
アンバー

ここで、folder_nameは、「追加」コマンドを実行したフォルダーの親フォルダーです
MacGyver

28
この回答は危険なほど間違っています。ファイルのローカルコピーを削除することで、変更のステージングが解除されます。以下のブライアン・レイシーの答えははるかに優れています。
ヘンリーヘンリンソン

6
みんな、これは元の質問に答えます:追加されてから元に戻されたファイルまたはフォルダーは、削除されずにバージョン管理されていない状態に戻るだけです。それはまさに質問が尋ねるものです。変更されたファイルで使用すると、もちろん元に戻りますが、それは問題ではありませんでした。これは、リンク先のページに示されている非常に具体的な使用例です!
Julien Lebosquain 2016年

2
@JulienLebosquainわかりました。あなたと私はこのフレーズを異なって理解していますすべてのドキュメントを削除せずに。残念ながら、最新バージョンを復元することにより、作業コピーにsvn revert新しく追加された変更も削除しHEADます。反対票を削除しましたが、それでも警告は重要だと感じています。
jpaugh 2016年

145

svn rm --keep-local folder_name

注:svn 1.5.4では、--keep-localが指定されている場合でも、svn rmはバージョン管理されていないファイルを削除します。詳細については、http://svn.haxx.se/users/archive-2009-11/0058.shtmlを参照してください


9
変更を失うことなく「svn add」を元に戻すことができるため、これは知っておくと便利です。
Ryan H.

1
SVN 1.5.4がバージョン管理されていないファイルを削除することを確認していますか?レポートは再現可能ではなく、それに関する他のメールはありません。
Quentin Pradet 2013年

4
これは、ファイルを「追加解除」したいが、それでも保持したい場合のより良い答えです。このコマンドを実行しても、ファイルは?状態。
Robin Zimmermann

32

svn revert filename不要で、まだコミットされていないすべてのファイルを試してください。またはsvn revert -R folder、問題のあるフォルダに対して行ってから、設定を無視して操作をやり直してください。

ドキュメントから:

 you can undo any scheduling operations:

$ svn add mistake.txt whoops
A         mistake.txt
A         whoops
A         whoops/oopsie.c

$ svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops

4
番号!ローカルでの変更がすべて
失わ

@jpaugh-これはまさに私が答えで書いたものです、いいえ?
ボバ

1
OPが要求したこと(および私が期待していたこと)は、ローカルの変更失うことなく追加を取り消すコマンドでした。svn revert。ここでの回答はいずれも、ローカルの変更が元に戻すことによって失われるという事実について言及していません。
jpaugh 2016年

3

完全なプロセス(Unix svnパッケージ):

ファイルがSVNにないことを確認します。

> svn st -u folder 
? folder

すべてを追加(無視されたファイルを含む):

> svn add folder
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt
A   folder/folderToIgnore
A   folder/folderToIgnore/fileToIgnore1.txt
A   fileToIgnore2.txt

すべてに「追加」フラグを削除*無視*ファイル:

> cd folder

> svn revert --recursive folderToIgnore
Reverted 'folderToIgnore'
Reverted 'folderToIgnore/fileToIgnore1.txt'


> svn revert fileToIgnore2.txt
Reverted 'fileToIgnore2.txt'

フォルダのsvn ignoreを編集します

svn propedit svn:ignore .

次のように2つのシングル行を追加します。

folderToIgnore
fileToIgnore2.txt

アップロードするファイルを確認してコミットします。

> cd ..

> svn st -u
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt


> svn ci -m "Commit message here"

1
ありがとう、まさに私が必要としたもの。ファイルのコンテンツ自体には触れず、「追加」操作のみを元に戻したようです。以前の回答にコメントしたように、ローカルの変更が失われるのではないかと心配でしたが、ファイルが破損しているようには見えません。
ピーターM.-

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.