リポジトリからファイルを削除しましたが、元に戻したいと思っています。私が理解できる最善の方法は次のとおりです。
- 削除前のリビジョンに更新
- ファイルを別の場所にコピーする
- 頭に更新
- ファイルをコピーして戻します
- それらを追加
- 専念
それは悪臭を放ち、起動するすべての履歴が失われます。これを行うためのより良い方法が必要です。私はすでにSVN Bookを調べましたが、何も見つかりませんでした。現在、SVN タグ リストを調べています。
リポジトリからファイルを削除しましたが、元に戻したいと思っています。私が理解できる最善の方法は次のとおりです。
それは悪臭を放ち、起動するすべての履歴が失われます。これを行うためのより良い方法が必要です。私はすでにSVN Bookを調べましたが、何も見つかりませんでした。現在、SVN タグ リストを調べています。
Sean Bright が提案したように svn マージを行う際の問題は、削除と同じリビジョンで行われた他の変更を再導入することです。svn コピーは、削除されたファイルのみに影響する、よりターゲットを絞った操作です。
Tortoise SVN を使用すると、次のように svn コピーを介して、作業コピー ディレクトリおよび後の SVN リビジョンから削除されたファイルを復活させることができます。
削除されたファイルは、作業コピー フォルダーに配置されます。SVN に再度追加するには、復元されたファイルを右クリックし、[SVN コミット] を選択します。
注意: この方法では、復元されたファイルの以前の履歴が保持されますが、TortoiseSVN ログで以前の履歴を確認するには、[ログ メッセージ] ダイアログで [コピー/名前変更時に停止] がオフになっていることを確認する必要があります。
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の場合(私は思う...)
ただし、それは完全にテストされていません。
OPによる編集:これはTortoiseSVNの私のバージョン(次のボタンのない古い種類)で動作します
コツは逆方向にマージすることです。私を正しい方向に向けてくれたsean.brightに称賛を!
編集:異なるバージョンを使用しています。私が説明した方法は、私のバージョンの TortoiseSVN で完全に機能しました。
また、リバース マージするコミットに複数の変更があった場合は、マージが完了したら、コミットする前に他の変更を元に戻す必要があることにも注意してください。そうしないと、これらの余分な変更も元に戻されます。
完全を期すために、これは、何を探すべきかを知っていれば、svn book で見つけたものです。それはあなたがすでに発見したものです:
本のより最近の(そして詳細な)バージョンからの同じこと:
Tortoise SVN コピー機能を使用して、コミットされた変更を元に戻します。
それが役立つことを願っています
私はいつもサーバー操作としてsvncopyを使用しているようですので、2つの作業パスで機能するかどうかはわかりません。
削除したファイルをプロジェクトのローカル作業コピーに復元する例を次に示します。
svn copy https://repos/project/modules/module.js@3502 modules/module.js
プロジェクトディレクトリ内にいる間。これは、ディレクトリ全体を復元する場合にも機能します。
Tortoise SVN を使用している場合は、そのリビジョンからの変更を作業コピーに戻して (効果的に逆マージを実行して)、別のコミットを実行してファイルを再度追加できるはずです。手順は次のとおりです。
ファイルを復元し、リビジョン履歴を失わないようにする最も簡単な方法は、SVN copyを使用することです。上記のマージの例は、同じことを達成するためのより複雑な方法のように思えます。単純にリビジョンを復元したいのに、なぜマージする必要があるのでしょうか?
この例では以下を使用していますが、非常にうまく機能します。
svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs
私は常にsvn copy
サーバー操作として使用しているように見えるので、2 つの作業パスで機能するかどうかはわかりません。
Tortoise SVNの場合:
変更をまだコミットしていない場合は、ファイルまたはディレクトリを削除した親フォルダーを元に戻すことができます。
削除したファイルをすでにコミットしている場合は、リポジトリ ブラウザを使用して、ファイルがまだ存在するリビジョンに変更し、コンテキスト メニューから [コピー先...] コマンドを使用できます。ターゲットとして作業コピーへのパスを入力すると、削除されたファイルがリポジトリから作業コピーにコピーされます。
復元したい 1 つのファイルだけをチェックアウトできるはずです。ファイルが存在した最後のリビジョンはsvn co svn://your_repos/path/to/file/you/want/to/restore@rev
どこにあるかなどを試してください。rev
少し前にこれを正確に行う必要がありましたが、正しく覚えていれば、-r
オプションを使用してsvn
も機能しませんでした。:rev
構文を使用する必要がありました。(逆に覚えていたかもしれませんが…)