web-dev-qa-db-ja.com

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

私は今朝、なんとかして次のようにして足を撃ちました。

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

幸いなことに、この場合、金曜日に仕事を辞める前に「svn diff> temp.txt」を実行し、temp.txtファイルはまだハードドライブ上にあったので、そのファイルを「パッチ」にフィードして、失われた変更。

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

91
Jeremy Friesner

いいえ、(絶対に)[〜#〜] no [〜#〜]

Subversionにファイルを元に戻す必要があると言った場合、すべての変更は風によって失われます。

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

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

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

74
Peter Parker

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

98
shto

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

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

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

31
Vladimir

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

13
JProgrammer

svn command-line clientを使用している場合、ファイルを回復することはできません。

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

これはTortoiseSVNの構成可能なオプションです。 [設定]-> [ダイアログ1]-> [元に戻すときにごみ箱を使用]

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

7
Manohar

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

頑張って、アークデ

5
Aurelian Cotuna

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

4
scor4er

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

BUT:Handy Recoveryで失われたファイルを復元しました。つまり、SVNは復帰時にファイルを削除するだけです。

データ復元ソフトウェアを使用して、復元されたファイルを復元します(トライアル ハンディ復元

1

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

1
fyts

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

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

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

「svn revert」を実行する前に、「svn diff」を実行するのが一般的なパラダイムだと思います。これを行う習慣を身につければ、差分が端末にエコーされただけでも、失われた変更を回復するための手段が少なくとも1つあります。

0
shaneb