1

私のチームの誰かが、チーム リポジトリの現在のリビジョンでいくつかのファイルを削除するという「間違い」を犯しました。現在のローカル バージョンをヘッド リビジョンに更新することはできますか? コミットをクリックすると、subclipse は不足しているファイルを認識せずにアップロードします。

前もって感謝します、
rAyt

4

3 に答える 3

9

ああ、ピートの愛のために!これまでの回答は、せいぜい誤解を招くものでした。

あなたの質問から、次のようなことを試みていたようです:

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

それ以外は機能しません。コミットする変更はありません。古いリビジョンに更新することはできますが、そこで変更を加えることはできません。過去を変えることはできません。新しいリビジョンをコミットして、損傷を元に戻すことしかできません。

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

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

JR ハッカー、うっかり削除してしまう b:

svn rm b
svn commit -m "oops"

結果のコミットを r9 と呼びましょう。

次回、リポジトリから更新するときは、

svn update

trunk
    a

b 消える! パニック?いいえ、これはバージョン管理システムです。チェックインしたものはすべて復元できます。次の 2 つの可能性があります。

古いリビジョン、つまりファイルがまだ存在している最後のリビジョンからファイルをコピーするだけです: 8.

svn cp svn://repo/trunk/b@8 .
svn commit -m "restored b from revision 8"

より一般的な解決策は、マージを使用することです。この手法を使用して、不要な削除以上のものを元に戻すことができます。

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

このマージの読み方は次のとおりです。

最初に、現在のディレクトリ (最初の ".") に関連付けられているリポジトリ フォルダー (svn://repo/trunk) の r9 (戻る) から r8 に移動するために必要な変更を確認します。ここで、現在のディレクトリ (2 番目の ".") の作業コピーに対してこれらの変更を実行します。

単一の変更を元に戻すだけの場合は、より便利な構文があります。

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

コマンド ラインから svn を使用していない場合は、ツールを少し調べてみると、何かが見つかるはずです。たとえば、TortoiseSVN には、作業コピーからログを開くときに便利な「このリビジョンからの変更を元に戻す」機能があります。

于 2009-07-23T20:10:38.683 に答える
1

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

于 2009-07-23T17:46:14.230 に答える
0

私は次のことをします:

削除する前にリビジョン番号を見つけてください... svnadmin dump -r1:[ここに適切なリビジョン番号] > file.dump を実行します。

次に、「svnadmin create [リポジトリ名]」という新しいリポジトリを作成し、新しいリポジトリにダンプをロードします。"svnadmin load [新しいリポジトリ名] < file.dump.

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

于 2009-07-23T17:47:56.100 に答える