argius note

プログラミング関連

ファイル名を変更する

http://d.hatena.ne.jp/argius/20050907/1126111316 の応用で。
リファクタリングなどでクラス名を変える場合、publicクラスはファイル名とクラス名が一致している必要があるので、ファイル名を変えて登録しなければならない。
ローカルでファイル名を変更し、そのまま登録すると、古いファイル名のバージョン管理ファイルは削除(Atticに移動+dead)となり、新しいファイル名のバージョン管理ファイルが新規に作られる。この場合、履歴が引き継がれない。
履歴を生かしたい場合は、ローカルでファイル名を変更したのに合わせて、リポジトリのファイルを改名する。バージョン管理ファイル自体にはファイル名は書かれていないので、ファイル名を変更するだけで良い。この場合は、改名したことの履歴が残らないのが欠点(とここに書いてある。)。が、Javaの場合、バージョン管理ファイルを移動してからチェックアウトした直後、クラス名を変更しなければならないので、その変更のログに「クラス名を変更」とか記録しておけば良いと思う。
両方の欠点を補う方法として、改名ではなく、コピーしてしまう。バージョン管理ファイルを新しいファイル名でコピーし、これをチェックアウトする。これで、同じ履歴を持ったファイル名だけが異なる2つのファイルができる。次に、ローカルの古いファイル名の方を削除し、リポジトリに反映させる。