TortoiseHg で日本語ファイル名を使う方法についてのメモ。
概要
- Windows 環境のみの運用であれば、win32mbcs 拡張を有効にすることで TortoiseHg で日本語ファイル名を扱うことができます。 ファイル名を UTF-8 で扱うための拡張も開発されています。
- 2011/11/10: TortoiseHg 2.2 (Mercurial 2.0) では fixutf8 拡張は動作しません。 fixutf8 拡張を使用する場合は、TortoiseHg 2.1.4 (Mercurial 1.9.3) をインストールしてください。
- 2011/11/08: TortoiseHg 2.2 で、win32mbcs 拡張利用時にシェル拡張が正しく動作しない問題が修正されたそうです。
基礎知識
- Mercurial (Hg) は分散バージョン管理システム (VCS) の 1 つ。 Git や Bazaar とよく比較される。
- Windows エクスプローラと統合された Hg フロントエンドである TortoiseHg は http://tortoisehg.bitbucket.org/ja/ からダウンロードできる。
- TortoiseHg 0.8 以降では、ダイアログのメッセージなどが日本語表示されるようになった (日本語表示させたい場合は環境変数 LANG に ja を指定する)。 日本語ファイル名も一見それなりに扱えるが、 「ソ」や「表」など SJIS 2 バイト目に「\」を含むダメ文字はコミットできない。
文字化けの原因
-
ファイル名中に「\」が含まれる場合がある。
- 「ソ」や「表」などは Shift_JIS でエンコードすると 2 バイト目が「\」となる。 これが Windows のパス区切り文字と認識されるため、エラーとなってしまいコミットができない。 これを解決するには、Shift_JIS を正しく処理できるようにするか、 ファイル名を UTF-8 でコミットする必要がある。
- Windows 環境と Linux 環境で文字コードが異なる
- Mercurial はバイナリ表現のままファイル名を扱う。 Windows クライアントはファイル名が Shift_JIS でエンコードされていると期待し、 Linux クライアントはファイル名が UTF-8 などでエンコードされていると期待するため、 チェックアウトしたときにおかしなファイル名となる。 これを解決するには、Windows 環境でもファイル名を UTF-8 でコミットする必要がある。
解決方法
win32mbcs
-
ユーザディレクトリ直下にある mercurial.ini に hgext.win32mbcs = と書くことで
win32mbcs 拡張が有効になり、「\」を含む文字の問題は回避できる。
ただし、ファイル名は Shift_JIS で保存されるため、
Windows 以外のクライアントでは文字化けが発生する。
- mercurial.ini:
[extensions]
hgext.win32mbcs =
- mercurial.ini:
hg-fixutf8
- Stefan Rusek 氏の作った拡張。 ファイル名を Shift_JIS ではなく UTF-8 で扱うようにすることで、問題を回避できる。
- 本家のものを導入すると TortoiseHg からのコミットがエラーとなるため、 Tinyfish 氏のフォーク版 を使う。
-
導入手順は
http://mercurial.selenic.com/wiki/FixUtf8Extension
(英語)を参照。
- hg-fixutf8 を適当な場所にダウンロードする。
> hg clone http://bitbucket.org/tinyfish/hg-fixutf8/
- mercurial.ini に hg-fixutf8 のパスを設定する。win32mbcs とはバッティングするので、win32mbcs が指定されていたら削除する。
[extensions]
fixutf8 = C:\path\to\fixutf8.py - 既存のリポジトリのファイル名を更新する。
> hg addremove -s 100
> hg commit -m "Fix filenames"- ただし、それまで win32mbcs を使っていたリポジトリでは、デコードエラーとなってうまく動かない場合が多い。 一旦 ASCII ファイル名でコミットした後に fixutf8 を有効化して再リネームする等の回避策が必要。
- コミットログを UTF-8 で記述する場合には、環境変数 HGENCODING に utf-8 を指定しておく。
- hg-fixutf8 を適当な場所にダウンロードする。
- ダメ文字を含むファイルまたはフォルダのシェル拡張 (右クリックメニューとアイコンオーバーレイ) は機能しない。 この問題を修正した DLL が下記ページで公開されている。
cygwin mercurial
- Cygwin 1.7 では、ファイル名が UTF-8 で扱われるようになった。 このため、Cygwin 版の Mercurial を使えば Linux との相互運用が可能となる。 ただし、TortoiseHg などの GUI は利用できない。
比較表
文字コード | ダメ文字 | 複数OS | GUI | 安定性 | |
---|---|---|---|---|---|
デフォルト | Shift_JIS | × | × | ○ | ◎ |
win32mbcs | Shift_JIS | ○ | × | ○ | ○ |
hg-fixutf8 | UTF-8 | ○ | ○ | ○ | × |
cygwin | UTF-8 | ○ | ○ | × | ○ |
参考文献
- http://tortoisehg.bitbucket.org/ja/
- http://bitbucket.org/kuy/thg-ja/wiki/Japanese
- http://mercurial.selenic.com/wiki/EncodingStrategy
- http://groups.google.com/group/mercurial-ja/
- http://bitbucket.org/marutosi/tortoisehg/wiki/Home.ja
- http://tobysoft.net/wiki/index.php?Mercurial/日本語ファイル名、日本語コミットログ関係
- http://mercurial.selenic.com/wiki/FixUtf8Extension
- http://bitbucket.org/stefanrusek/hg-fixutf8/
- http://bitbucket.org/tinyfish/hg-fixutf8/
- http://hibari.2ch.net/test/read.cgi/tech/1295493964/
- http://hibari.2ch.net/test/read.cgi/tech/1321109748/
更新履歴
- 2011/11/10: TortoiseHg 2.2 に関して追記。
- 2011/08/03: TortoiseHg 2.1.2 に関して追記。
- 2011/07/06: TortoiseHg 2.1 に関して追記。
- 2010/11/03: シェル拡張の修正版に関して言及。
- 2010/10/11: Tinyfish 氏の fixutf8 に言及。
- 2010/04/19: 比較表を追加。
- 2010/04/17: cygwin mercurial について追記。目次を設置。
- 2010/04/11: TortoiseHg 1.0 以降も状況は変わらないので、「0.9」の文言を削除。
- 2009/11/18: TortoiseHg 0.9 に言及。fixutf8 の解説を圧縮。
- 2009/10/12: TortoiseHg 0.8.3 がリリースされていたので、試行結果を掲載。
- 2009/10/03: win32mbcs の最新版について追記。
- 2009/07/05: HGENCODING についての記述を追記。
- 2009/07/02: TortoiseHg 0.8 がリリースされたので、試行結果を掲載。
- 2009/04/29: 初版作成。