日本語のパスを含むSubversionのリポジトリをMercurialのリポジトリに変換する

SubversionリポジトリMercurialリポジトリに変換するには
「hg convert」コマンドで簡単に変換できる。

しかし、リポジトリに日本語のパスを含む場合、日本語のパス対応がバージョン管理システムごとに異なるため問題が出る。

※各バージョン管理システムの日本語パスの対応

Subversionから変換した日本語パスの問題

  • 「hg update」した場合、Subversionから変換した日本語パスのファイルが文字化けしてしまう。
  • 日本語対応させるwin32mbcsのエクステンションを使用するのが常套手段であるが、win32mbcsを有効にした場合、Subversionから変換した日本語パスがあるとshift-jisに変換できないため「hg update」などのリポジトリの操作ができない。

普通はファイルを1つ1つ手作業で消去と追加を繰り返すことだろう。
でも、次のような方法をとれば一括で移行でき、なおかつ履歴もほとんど残る。

  1. 「hg convert」でリポジトリを変換
  2. win32mbcsを無効にした状態で、「hg update」でMercurialの作業ディレクトリを更新する。文字化けファイルが発生する。statusを確認すると、文字化けファイルは「?」マーク(管理外のファイル)になっており、リポジトリ上のファイルは「!」マーク(作業ディレクトリにいないファイル)になっている。
  3. Subversionの作業ディレクトリから最新版を取得し、Mercurialの作業ディレクトリにコピーする。文字化けファイルの位置に文字化けしていないファイルが配置される。
  4. 「hg addremove --similarity 100」でMercurialに履歴を追跡させる。文字化けファイルは削除され、代わりに削除されたファイルと同じ日本語パスの文字化けしていないshift-jis版が追加される。
  5. 「ソ」などのshift-jisのファイルがある場合、「hg addremove」が失敗する。その場合、失敗するファイルを「hg rm」で削除する。
  6. win32mbcsを有効にし、先ほど失敗した「ソ」などのshift-jisのファイルを追加する

それぞれのコマンドの詳細はマニュアルを参考にしてほしい。