argius note

プログラミング関連

リポジトリから削除したファイルを復旧

EclipseCVSを前提とする。
登録済みのファイルがあって、そのローカルファイルを削除し、リポジトリと同期化すると、「右向きグレーのマイナス記号が書かれた矢印」が表示され、コミットすると、リポジトリから削除される。このとき、リポジトリはどうなっているかというと、

  • 削除したファイルのディレクトリ下に"Attic"というサブディレクトリができる。
  • 削除したファイルのバージョン管理ファイル*1がAtticに移動される。
  • バージョン管理ファイルに「削除」の旨が記録される。

となり、このときのバージョン管理ファイルの記録は以下のようになる。この例は、リビジョンが1.3のときに削除したもの(バージョン部分のみ抜粋)。

1.3
date	2005.09.07.16.24.28;	author USER;	state dead;
branches;
next	1.2;

1.2
date	2005.09.07.16.21.12;	author USER;	state Exp;
branches;
next	1.1;

1.1
date	2005.09.07.16.20.24;	author USER;	state Exp;
branches;
next	;

もし、削除を取り消したい場合には、同じファイルを再度登録すれば、Atticに移動したバージョン管理ファイルが復活する。履歴もちゃんと残っているので、削除直前のバージョンが手元に無くても、空のクラスを登録して、「改訂」から取り出せばOK。
もし、削除を取り消したい場合には、削除時の動作の逆をやれば良い*2。つまり、

  • バージョン管理ファイルに「削除」の旨(dead)が記録されているので、このりビジョンを消してしまう。1.3の行から1.2の前の行までを消し、ファイル先頭のheadリビジョンを1.2に書き換える。ファイルは書き込み禁止なのでアクセス権を変更すること。
  • Atticにあるバージョン管理ファイルを親ディレクトリに移動する。
  • Atticディレクトリは消しても消さなくても良い。

とする。一度チェックアウトを解除してからやったほうがきれいにできる。
失敗してもやり直しが利くように、バックアップを取っておくこと。

*1:リポジトリ内にある、ファイル名が",v"で終わっているファイル

*2:これが一般的な手順かどうかは不明。