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