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