121

リポジトリからファイルを削除しましたが、元に戻したいと思っています。私が理解できる最善の方法は次のとおりです。

  • 削除前のリビジョンに更新
  • ファイルを別の場所にコピーする
  • 頭に更新
  • ファイルをコピーして戻します
  • それらを追加
  • 専念

それは悪臭を放ち、起動するすべての履歴が失われます。これを行うためのより良い方法が必要です。私はすでにSVN Bookを調べましたが、何も見つかりませんでした。現在、SVN タグ リストを調べています。

4

9 に答える 9

181

Sean Bright が提案したように svn マージを行う際の問題は、削除と同じリビジョンで行われた他の変更を再導入することです。svn コピーは、削除されたファイルのみに影響する、よりターゲットを絞った操作です。

Tortoise SVN を使用すると、次のように svn コピーを介して、作業コピー ディレクトリおよび後の SVN リビジョンから削除されたファイルを復活させることができます。

  • 以前にファイルが含まれていた作業コピー フォルダーを参照します。
  • エクスプローラーでフォルダーを右クリックし、TortoiseSVN -> ログの表示に移動します。
  • ファイルを削除したリビジョンの直前のリビジョン番号を右クリックし、[リポジトリの参照] を選択します。
  • 削除したファイルを右クリックし、「作業コピーにコピー...」を選択して保存します。

削除されたファイルは、作業コピー フォルダーに配置されます。SVN に再度追加するには、復元されたファイルを右クリックし、[SVN コミット] を選択します。

注意: この方法では、復元されたファイルの以前の履歴が保持されますが、TortoiseSVN ログで以前の履歴を確認するには、[ログ メッセージ] ダイアログで [コピー/名前変更時に停止] がオフになっていることを確認する必要があります。

于 2009-08-05T04:42:34.480 に答える
60

svn マージを使用します。

svn merge -c -[rev num that deleted the file] http://<path to repository>

例:

svn merge -c -12345 https://svn.mysite.com/svn/repo/project/trunk
             ^ The negative is important

TortoiseSVNの場合(私は思う...)

  • Explorer で右クリックし、TortoiseSVN -> Merge... に移動します。
  • [リビジョンの範囲をマージする] が選択されていることを確認し、[次へ] をクリックします。
  • 「マージするリビジョン範囲」テキストボックスで、ファイルを削除したリビジョンを指定します
  • [逆マージ] チェックボックスをオンにして、[次へ] をクリックします。
  • マージをクリックします

ただし、それは完全にテストされていません。


OPによる編集:これはTortoiseSVNの私のバージョン(次のボタンのない古い種類)で動作します

  • ものが削除されたフォルダーに移動します
  • Explorer で右クリックし、TortoiseSVN -> Merge... に移動します。
  • Fromセクションに、削除を行ったリビジョンを入力します
  • Toセクションで、削除する前のリビジョンを入力します。
  • 「結合」をクリック
  • 専念

コツは逆方向にマージすることです。私を正しい方向に向けてくれたsean.brightに称賛を!


編集:異なるバージョンを使用しています。私が説明した方法は、私のバージョンの TortoiseSVN で完全に機能しました。

また、リバース マージするコミットに複数の変更があった場合は、マージが完了したら、コミットする前に他の変更を元に戻す必要があることにも注意してください。そうしないと、これらの余分な変更も元に戻されます。

于 2009-01-29T05:01:59.183 に答える
27

完全を期すために、これは、何を探すべきかを知っていれば、svn book で見つけたものです。それはあなたがすでに発見したものです:

変更の取り消し

削除済みアイテムの復活

本のより最近の(そして詳細な)バージョンからの同じこと:

変更の取り消し

削除済みアイテムの復活

于 2009-01-29T18:41:25.203 に答える
17

Tortoise SVN コピー機能を使用して、コミットされた変更を元に戻します。

  1. 削除されたファイル/フォルダーを含む親フォルダーを右クリックします
  2. 「ログを表示」を選択
  3. 変更/削除が行われた前のバージョンを選択して右クリックします
  4. 「参照リポジトリ」を選択します
  5. 復元する必要があるファイル/フォルダーを選択し、右クリックします
  6. ファイル/フォルダーを最新リビジョンにコピーする「コピー先」を選択します

それが役立つことを願っています

于 2010-10-12T09:53:16.397 に答える
13

私はいつもサーバー操作としてsvncopyを使用しているようですので、2つの作業パスで機能するかどうかはわかりません。

削除したファイルをプロジェクトのローカル作業コピーに復元する例を次に示します。

svn copy https://repos/project/modules/module.js@3502 modules/module.js

プロジェクトディレクトリ内にいる間。これは、ディレクトリ全体を復元する場合にも機能します。

于 2012-09-17T10:59:07.617 に答える
6

Tortoise SVN を使用している場合は、そのリビジョンからの変更を作業コピーに戻して (効果的に逆マージを実行して)、別のコミットを実行してファイルを再度追加できるはずです。手順は次のとおりです。

  1. ファイルを削除した作業コピー内のフォルダーを参照します。
  2. レポブラウザに移動します。
  3. ファイルを削除したリビジョンを参照します。
  4. 変更リストで、削除したファイルを見つけます。
  5. ファイルを右クリックして、「このリビジョンからの変更を元に戻す」に移動します。
  6. これにより、ファイルが作業コピーに復元され、履歴が保持されます。
  7. ファイルをコミットして、リポジトリに追加し直します。
于 2009-01-29T05:13:14.247 に答える
5

ファイルを復元し、リビジョン履歴を失わないようにする最も簡単な方法は、SVN copyを使用することです。上記のマージの例は、同じことを達成するためのより複雑な方法のように思えます。単純にリビジョンを復元したいのに、なぜマージする必要があるのでしょうか?

この例では以下を使用していますが、非常にうまく機能します。

svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs

私は常にsvn copyサーバー操作として使用しているように見えるので、2 つの作業パスで機能するかどうかはわかりません。

于 2009-09-09T21:18:54.647 に答える
4

Tortoise SVNの場合:

変更をまだコミットしていない場合は、ファイルまたはディレクトリを削除した親フォルダーを元に戻すことができます。

削除したファイルをすでにコミットしている場合は、リポジトリ ブラウザを使用して、ファイルがまだ存在するリビジョンに変更し、コンテキスト メニューから [コピー先...] コマンドを使用できます。ターゲットとして作業コピーへのパスを入力すると、削除されたファイルがリポジトリから作業コピーにコピーされます。

于 2009-01-29T05:09:11.197 に答える
1

復元したい 1 つのファイルだけをチェックアウトできるはずです。ファイルが存在した最後のリビジョンはsvn co svn://your_repos/path/to/file/you/want/to/restore@revどこにあるかなどを試してください。rev

少し前にこれを正確に行う必要がありましたが、正しく覚えていれば、-rオプションを使用してsvnも機能しませんでした。:rev構文を使用する必要がありました。(逆に覚えていたかもしれませんが…)

于 2009-01-29T05:02:37.747 に答える