2009-07-23 4 views
1

私のチームの誰かが、チームリポジトリの現在のリビジョンのいくつかのファイルを削除するのに "間違い"を起こしました。現在のローカルバージョンをヘッドリビジョンに更新することは可能ですか?コミットをクリックすると、欠落しているファイルを認識することができません。事前にSVN - 完全なローカルコピーをHEADバージョンに更新する

おかげで、
rAyt

+0

私はあなたの質問をよく理解していませんが、何か試してみる前に、ローカルリビジョンのディレクトリを簡単にバックアップしてください。 – Elijah

+0

申し訳ありませんが、文章を修正しました。今より意味をなさないはずです。 –

答えて

9

ピートの愛のためにああ、! 。答えはこれまでされている - - 最高の状態で誤解を招く

あなたの質問から、あなたはこのような何かしようとしていたように、それが聞こえる:それは動作しません除いて

svn update -r8 
# ok, I can see the deleted file now 
svn commit -m "I want r8 to be newest" 

をへの変更はありません。コミット。古いリビジョンに更新することができますが、しかし、そこに変更を加えることはできません。あなたは過去を変えることはできません。新しいリビジョンをコミットするだけで、ダメージを取り消すことができます。

あなたのリポジトリがsvn:// repoにあるとします。 ここでは、フォルダトランクに2つのファイル "a"と "b"が含まれている簡単な例を示します。このリビジョン8(r8)と呼ぶことにしましょう。

trunk # working copy of svn://repo/trunk 
    a 
    b 

J.R.ハッカー、アップスリップ、誤ってBを削除します。

svn rm b 
svn commit -m "oops" 

はのは、R9をコミット結果呼ぶことにしましょう。

だから、あなたがリポジトリから更新次回は、

svn update 

trunk 
    a 

bが消えます!パニック?いいえ、これはバージョン管理システムです。チェックインされたものはすべて復元できます。

だけコピー古いリビジョンからファイル、それはまだ存在していた、すなわち最後のリビジョン:8.

svn cp svn://repo/trunk/[email protected] . 
svn commit -m "restored b from revision 8" 

より一般的な解決策は、マージを使用することですここでは、2つの可能性があります。この手法を使用して、迷子の削除以外のものを元に戻すことができます。

svn merge -r9:8 . . 
svn commit -m "reverted the changes made in revision 8" 

このマージを読むための方法は次のとおりです。

まず図アウトリポジトリフォルダ(SVN://レポ/トランク)のR8にR9(背面)から取得するためになされる必要がある変更内容現在のディレクトリ(最初の "。")に関連付けられています。さて、現在のディレクトリ(2番目の "。")の作業コピー上でこれらの変更を実行します。あなただけの単一の変更元に戻すしている場合は、より便利な構文があります

:コマンドラインからSVNを使用していない場合は、あなたのツールの周りビットを突く、

svn merge -c-8 . . #note the minus sign before the 8 

を、あなたはに確信しています何かを見つけます。 TortoiseSVNは、例えば、作業コピーからログを開くと、このリビジョンの変更を元に戻すことができます。

+0

他の誰かがファイルを削除したように私に聞こえました。彼はまだ更新しておらず、自分のローカルリポジトリにファイルを持っていました。コースはうまくいかないでしょう。はい、マージが機能します。はい、自分のローカルファイルのコピーを取って更新し、元に戻します。モデレートするときはコメントを残してください。 – JeeBee

+0

Subversionには、「ローカルリポジトリ」というものはありません。リポジトリとユーザーの*作業コピーは1つだけです。コミットされていない*作業コピー*の一部で偶発的なsvnの削除は、svn revertで元に戻すことができます。 – bendin

1

削除・イン・SVNのどこかにあなたのリビジョンのファイル(例えば、デスクトップ上の一時フォルダ)は、その後、更新(削除され、元のファイルのコピーを取りますあなたの同僚のコミットされた削除アクションに従って)、コピーを元に戻してSVNに戻します。

+0

この方法では、誤って削除されたファイルへの履歴接続が失われ、サーバ上で少なくともsvn 1.6を使用していない限り、同じファイル(コンテンツ)がリポジトリに2回保存されます。 – bendin

0

私は、次の手順を実行します:[goodrevisionnumberこちら]> file.dump:

削除... svnadminはダンプ-r1を行う前に、リビジョン番号を検索します。

次に、新しいリポジトリ "svnadmin create [repository name]"を作成し、新しいリポジトリにダンプをロードします。 「svnadminはを次にロード[newrepositoryname] < file.dump。

、このリビジョンをチェックアウトし、新しいものに古いレジからファイルをコピーしてコミット。

+0

以前のリビジョンはすべて失われますか? –

+0

nope ...ダンプを実行するときに、リビジョン1から適切なリビジョンを指定します。ロードを実行すると、実際にはそれぞれのコミットが再びコミットされます。 – tardomatic

+0

でした!ありがとう –

関連する問題