Mercurial で 既にリポジトリに入っているファイル名を変更する
事情により既にリポジトリに追加されているファイル名を変更したくなった。具体的には Sencha Touch 2 でリポジトリをつくるときにスキャッフォールドとして hoge.js みたいにいっぱい配置しちゃってたけど、実際は Hoge.js と大文字にしないと認識されないのでそのリポジトリ問題を解決する。
リポジトリのファイル名を変更したのでマージに失敗した
以下ログ
[atas@ ~/work/(hg)-[ticket]-] hg merge default abort: case-folding collision between hoge/app/controller/Main.js and hoge/app/controller/main.js
ググってみるとどうやら歴史改変して解決する方法があるが、ちょっとこわいのでやりたくなかった。なので達人に聞いたら解決方法を教えてくれた。
1 hoge_moge.js という _ を含んだ名前を変更する
これはどうやら単に mv すればいいだけらしい。あるいは rename, move
hg mv hoge_moge.js Hoge_moge.js
らしい。やってはないけど
2 hoge.js という完全に snake_case の名前を変更する
この場合は hg mv ではできないらしい。なので以下の方法をとった
- hg forget でリポジトリから消す
- commit
- mv でファイル名変更
- hg add で変更したファイル名を追加
- commit
以下は具体的な手段
# リポジトリから削除 hg forget hoge.js # commit する hg ci # mv して名前変更 mv hoge.js Hoge.js # hg add で名前変更後のファイルをリポジトリに追加 hg add Hoge.js # commit hg ci
以上。コンフリクトとかはまあ普通に解消しましょう。