偶発的な「svn revert」から回復する方法はありますか?


94

今朝、次のようにしてなんとか自分の足で撃ちました。

  1. プロジェクトの変更に取り組み始めました
  2. たくさんのファイルをたくさん編集した
  3. 私のアプローチはすべて間違っていて、最初からやり直す必要があることに気づきました
  4. 私のプロジェクトのトップレベルにcdし、「svn --recursive revert」を実行しました。ローカルサンドボックスを変更前の状態に復元します。
  5. 私のローカルサンドボックスには他にも多くの未解決の変更点があり、それらすべてを完全に消去したことに気づいたとき、恐怖に包まれました。(svnサーバーが先週の金曜日にダウンしていたため、チェックインできず、週末に忘れていました)

幸いにも、この場合、金曜日に作業を終える前に「svn diff> temp.txt」を実行していたため、temp.txtファイルがまだハードドライブに残っていたため、そのファイルを「パッチ」にフィードして、変更を失った。

しかし、私の将来の参考のために(つまり、次に私が同じ愚かな間違いを犯したとき)... svnに「svn revert」を取り消すように指示する方法はありますか?svnは、ローカル/チェックインされていない差分のバックアップをどこにでも保持しますか?


34
IIRC TortoiseSVNは元に戻されたファイルをごみ箱に移動しますが、元のSVNコマンドラインクライアントにはそのようなニュアンスがありません。
Dario Solera、

1
ごみ箱にファイルが見つかりません。私は運が悪いですか?
dalcantara 2012

5
ごみ箱に関するトップコメント。それは私の日を救っただけです!
OrganicPanda 2012年

2
あまりにも私のもの!どうもありがとうございます。元に戻したファイルがごみ箱に表示されただけで、復元できました。
sladda 2013年

1
あなたはこのごみ箱の事で私の裏側を保存しました!!!
Epirocks

回答:


79

いいえ、(絶対に)NOです。

Subversionでファイルを元に戻す必要があると言った場合、すべての変更が強制終了されます。

あなたの記憶だけがそれらを取り戻すことができます。

例外:追加した新しいファイルはステータス「追加済み」のみを失いますが、ファイルはこのディレクトリに残り、ステータスのみが不明です(「?」)

プラットフォーム/ソフトウェアの例外: WindowsでTortoiseSVNを使用すると、Revertは最初にファイルをごみ箱に入れ、次に元に戻します。ごみ箱を掘り下げてファイルを復元できます。


10
上記の補足:バージョン管理は、実際にファイルをコミットする場合にのみ役立ちます。作業コピーを殺すと何時間もの作業が殺されるという立場にいるなら、十分な頻度でコミットしていません。
myron-semack

1
同意します...この場合、svnサーバーがダウンしていたため、コミットされていない変更がまだ保留されていました。:^(
ジェレミー・フリースナー、2009年

13
はい!!!O / SやIDEに応じて回復する方法があります-心臓発作を起こす前に、以下の他の回答を読んでください!!
HDave 2013年

2
それは真実ではありません。単純なNOよりも少し複雑です。回復ツールを使用するか、幸運なことにファイルがごみ箱に入っている場合。
RaphMclee 2014

1
@RalphMclee:プラットフォームとsvnクライアントに依存します。TortoiseSVNは、元に戻された新しいファイルをごみ箱に保存します。これは単なる例外です。そして、回復ツールがあなたのファイルの変更を一貫した方法で再構築するのではないかと思います。覚えておくのがはるかに簡単で明確になります。元に戻すと作業内容が破壊されます。慎重に使用してください。
Peter Parker

104

解決策があります...ごみ箱に行くと、削除されたファイルの最新バージョンが見つかります。亀は、元に戻すすべてのファイルをごみ箱に「投げ」ます。


2
ちなみに、これは、復帰を行うときにTortoiseSVNが非常に遅いように見える理由でもあります。ごみ箱がいっぱいになると、ファイルをごみ箱に移動する操作は非常に遅くなります。この機能は、「一般-ダイアログ1」TortoiseSVN設定で無効にできます。
Wim Coenen

8
ありがとう、あなたは私を救った!誤って元に戻し、2週間の作業をほぼ失いました。幸い、私はそれをごみ箱で見つけました。
Arie Livshin 2010

2
@ArieLivshin、なぜあなたはコミットせずに2週間働くのですか?ブランチについてもっと学ぶ必要があるようです。
JoelFan 2013年

厄介なことにankhsvnはこれを行いません
Phil Hale

ありがとう..非常に役立ちます。
プレムシンビスト2015

32

Subversion固有ではありませんが、Eclipseを使用している場合は、ローカルの歴史で運を試すことができます。

さて、もう少しSubversion固有のものです。変更するたびにブランチを作成したくない場合は、いくつかのトランクをローカルでチェックアウトしたままにすることができます(trunk-modif-1、trunk-modif-2 ..)。 。)。各「変更」は個別のツリーで行われ、どのチェックアウトがどの変更に対応するかのリストを保持するだけで済みます。

または、Gitをローカルで使用することもできますが、試したことはありません。


3
FYI-右クリックコンテキストメニューの[ローカル履歴から復元]からローカル履歴にアクセスします。
HDave 2013年

Eclipseの部分については、ここではより具体的な答えは:stackoverflow.com/a/18220708/517705
Sk8erPeter

14

最近、新しいファイルの変更(約10)をSVNにコミットしないというこの間違いをしましたが、私の愚かな間違いのためにそれらはすべて消えました。しかし、私を救ったのは、コンテキストメニューのウィンドウの[以前のバージョンを復元]オプションでした。あれは安心して学んだ教訓でした。


ありがとうございました!これにより、何時間もの作業をやり直す必要がなくなりました。私はこれまでこのウィンドウの機能を見たことがありませんでしたが、それは私のベーコンを救いました!
NibblyPig 2012年

このようにして作業の日数を節約したおかげで、あなたに借りている6000ドルはどこに送ればよいですか?教訓...
HDave

私の日を救ってくれてありがとう。
Opax Web 2014

このような復元をサポートするチェックポイント設定は、パフォーマンスが低下するため、オフのままにしておきます。最近、元に戻す機能に問題があったため、Eclipseはgitアーカイブを含む私のプロジェクトのフォルダーを削除しました。むしろ、それをオンにしていたかったのです。しかし、Recuvaと呼ばれるWindowsプログラムは、削除されたファイルスペースを検索して私を救いました。すべてのファイルを回復するまで、影響を受けるドライブにコンテンツを追加しないように細心の注意を払い、1週間前の最新のバックアップ以降、すべてのソースファイルが変更されました。バイナリファイルはほとんど回復できませんでした。
カール

8

svnコマンドラインクライアントを使用している場合は、ファイルを復元できません。

しかし、SVNクライアントとしてTortoiseSVNを使用している場合は、それらを回復できます。TortoiseSVNは自動的にそれらをごみ箱に移動します。誤って元に戻した後、そこから復元できます。

これはTortoiseSVNの設定可能なオプションです。それは下にある[設定] - > [ダイアログ1 - >使用ごみ箱戻します。

デフォルトではチェックされています。つまり、ファイルはごみ箱に移動されます。必要に応じて(ほとんどの場合、これを無効にする必要はありません。理由がある場合は、お知らせください)


1
素晴らしい!...助けてくれた
Janani Kumar

6

InteliJを使用している場合、あなたは幸運な人です。トップメニューには[バージョン管理]オプションがあり、その下にローカル履歴オプションがあり、選択したファイルのすべての履歴が、そのファイルに対して実行したすべての操作(更新、コミット、元に戻す)を含めて見つかります。

頑張って、Arkde


1
そして、それが新しいファイルであった場合、ファイル自体が削除されます。その場合は、ファイルが含まれていたフォルダをプロジェクトビューから選択し、[ローカル履歴]を選択します。IntelliJはその日を再び救った。
Nufail 2013

4

また、.NETコード(.csファイルなど)を元に戻し、元に戻す前にアプリケーションをビルドしたが、変更を加えた後、リフレクターツールを使用してアセンブリファイルから変更を回復し、コードを表示できます。


2

ソリューションを元に戻し(Visual Studio + AnkhSVN)、いくつかのファイルの変更が失われました。ごみ箱にファイルが見つかりません。

しかし、私はハンディリカバリで失われたファイルを回復しました。つまり、SVNは元に戻すときにファイルを削除するだけです。

データ回復ソフトウェア使用して、復元されたファイルを回復します(試用版など) Handy Recoveryなど


2

Eclipseの履歴ブラウザーでファイル(ローカルリビジョン)のローカル変更ログを見つけることができて、とても幸運でした。私は違いを1つずつ調べていましたが、上書きする前にファイルをいくつか保存していました。


1

いいえ、SVNはログやバックアップを保持しません(他の回答にTortoiseSVNの解決策が記載されていますが)。

しかし、誰かが回答を閲覧していて、OPの質問でこのコメントに気付かなかった場合:

「幸いにも、この場合、金曜日に仕事を辞める前に "svn diff> temp.txt"を実行していたため、temp.txtファイルがまだハードドライブにあったため、そのファイルを "patch"にフィードして回復できました。私の失われた変更。」

「svn revert」を実行する前に「svn diff」を実行することは一般的なパラダイムだと思います。これを行う習慣になっている場合は、差分がターミナルにエコーされただけでも、失われた変更を回復するための少なくとも1つの方法があります。

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