#contents

*はじめに [#b8101c42]

WindowsでTorotoiseHg 0.7とMercurial 1.2でのお話。

何故かデフォルトではエンコードを考慮してくれません。
Subversionみたいにコンバートしてくれないので、
''WindowsでCP932(≒SJIS)のファイル名を突っ込むと、そのままリポジトリに入るので他の環境では化け化け''になってしまいます。
コミットログも同様?みたいです。

勘違いしてました。今まで日本語ファイル名はそもそも駄目だったみたいです。
%%リポジトリにUTF-8でファイル名を入れるための[[hg-fixutf8:http://www.selenic.com/mercurial/wiki/index.cgi/FixUtf8Extension]]拡張が必要な模様。%%

どちらにせよ、日本語ログ、日本語ファイル名を扱う時は対処が必要です。
''一人でも対処していない人がいるとリポジトリに異物が混入''されてしまうようです。

''※このページの内容はまだかなり混沌としています。自分で実験して試されることをオススメします。''

ちなみに、この手の最新情報は、2chの[[バージョン管理システムを語るスレ:http://find.2ch.net/?STR=%A5%D0%A1%BC%A5%B8%A5%E7%A5%F3%B4%C9%CD%FD%A5%B7%A5%B9%A5%C6%A5%E0]]が新しいです。質問とかもできます。

*現状確認 [#xf4773fe]

まずは結論:''WindowsでMercurialでマルチバイト周りは触るな危険!!''→''cygwin 1.7のUTF-8環境でコマンドラインで使うか、もしくは[[Bazaar]]オススメ(ヒドイ結論)''

**cygwin 1.7なら大丈夫かも?&fixutf-8は開発を諦めたっぽいです&結局全体的に微妙 [#g6ae2465]

2009/10/13時点での話ですが、fixutf-8ではマルチバイトがらみの解決は結局無理、ということらしいです。

そのためfixutf-8の記事は、全部一旦削除しました。

また、マルチバイト周りは、他の環境との相互運用がキツイみたい。

cygwin 1.7でUTF-8環境ならコマンドライン版は大丈夫という報告があります。(調査中)

(実際には特定条件化ではOKという話もあるのですが、個人的には安心して使えるレベルではないと感じています=それだとまともに他人にオススメできない)


↓こんな話があります
#quotex(バージョン管理システムについて語るスレ4,http://pc12.2ch.net/test/read.cgi/tech/1242918130/865){{
865 名前:826[sage] 投稿日:2009/10/03(土) 13:07:36
>>860
> >>850
> fix-utf8でなくて、win32mbcs?
> win32mbcsてマルチバイドのフォルダとかファイル名大丈夫だっけか…??
> って、自分で確認しないと菜・・・

fixutf8をフォークしたfixutf8-jpは改良が断念されました。
http://groups.google.com/group/mercurial-ja/msg/5b6952f29f8ae561

win32mbcsが唯一今のところ問題のない手段です。Windows限定で。
Linuxとの相互運用の場合は確実な手段がありません。

コマンドプロンプトでログが化けても、TortoiseHgではちゃんと表示できる
のは、TortoiseHgが正しくエンコードできるまで複数の文字コードで試すからです。
この場合、コミットログがShift_JISでファイル内容がUTF-8でも表示されます。
}}

**そもそも日本語ファイル名はヤバァイ感じ [#b474b972]

そもそも、日本語ファイル名に関しては、TortoiseHgを使おうが、ヤバイ感じです。


**TortoiseHgは日本語ファイル名ダメポ!! [#za3fc645]

TortoiseHgは、デフォで''コミットツールなどで日本語ファイル名が化けていないように見えますが、実はファイル名のエンコーディングは考慮していないという罠…''
(というか、そもそもMercurial自身はファイル名を単なるバイト列として扱うようです(最悪!))

つまり、

TortoiseHgで化けてないから日本語ファイル名大丈夫だろう
↓
そのまま追加、コミットする
↓
他の環境で化けてる!

ってなります。


**コマンドラインhg駄目 [#y7da34ea]
''hg-fixutf8を入れる前に試した実験な話です''

hg はファイル名にSJISの駄目文字を含んでいると動作が辺です。

%%コミット時は直接ファイル名を指定しましょう。%%
''そもそも、ヤバイ感じ。止めておいた方が無難です。
(UTF-8なんかで入らないので、他の環境などでヤバイと思う)''

hg commitの例:
#pre{{
>touch 表の噂.txt      # touchは空ファイル作ってるだけです。
>touch test.txt        # ただしBorland版touch
>hg st
? test.txt
? 表の噂.txt
>hg ci -A -m "added from command line"       # 追加しながらコミット。ここまではよい
adding test.txt
adding 表の噂.txt
>hg st         # コミットできてねえ!add相当は一応できてる
A 表の噂.txt 
>hg add .      # 念のため
>hg ci -m "added from command line retry"
nothing changed               # ええ!?無視ですか?
>hg st         
A 表の噂.txt    # ダメポwww
>hg ci -m "added from command line retry" 表の噂.txt
>hg st       # いけたみたいだけど、多分ヤバイ…
> 
}}
*解決策 [#ja4b0958]

**UTF-8環境でcygwin mercurialを使う [#g1a3bd05]

cygwin 1.7でついにUTF-8に対応されたので、
cygwinのコマンドラインで使う分には(多分)大丈夫。

GUIが使えないのでWindowsユーザーにはキツイところがありますです
(特にTortoiseSVNからの移行組)。


(詳細は要確認!!)

**win32mbcs拡張を有効にする [#ec75bfef]

''結論:win32mbcs使っても日本語ファイル名を使った場合は、他のOS環境と相互運用するのはムリっぽい''

実は、エンコードをコンバートするwin32mbcs拡張が標準添付されているのでそれを有効にします。
(ぜひデフォルトで有効にしとけよ!という要望を出しましょう。)

$HOME/Mercurial.iniに以下を追加します。
[extensions]セクションがすでにある場合、すでにある位置に追加しましょう。
下記はついでにCRLFの変換も(多分)考慮しています。

これでどの程度解決されるかは下記参照。

#pre{{
[extensions]
hgext.win32text=
hgext.win32mbcs=

[encode]
** = cleverencode:

[decode]
** = cleverdecode:
}}

参考:[[TortoiseHGのカスタマイズ(好きなdiffツールを割り当てる等) - ふにゃるん:http://d.hatena.ne.jp/Wacky/20080503/1209817242]]

''あれ?TortoiseHg 0.7ではエラーが出て動かなくなった気がします??''
エラーメッセージ
#pre{{
C:\Program Files\TortoiseHg\library.zip\mercurial\util.py:1043: UnicodeWarning:
Unicode equal comparison failed to convert both arguments to Unicode - interpret
ing them as being unequal
abort: [win32mbcs] filename conversion fail with cp932 encoding
}}

なお、後述のfixutf8を使うなら win32mbcs は使わないほうがいいらしい…うーん。

***この設定(win32mbcs)で解決できること [#acb4e6b4]

-%%ファイル名、%%コミットログがエンコードされてコミットされるので、多分他のプラットフォーム、OSと連携しても大丈夫な点

''ファイル名はマズイっぽいです…。'' ガーン(´・ω・`)

***この設定(win32mbcs)で解決できないこと [#y7594bda]

-コミットツールが化け化け
-コマンドラインツールが hg 日本語ファイル名を正しく扱えない。
hg commit とかやはり駄目



**hg-fixutf8拡張を組み込む [#kc00cbd4]

%%[[hg-fixutf8:http://www.selenic.com/mercurial/wiki/index.cgi/FixUtf8Extension]]を使うと、ファイル名をUTF-8でリポジトリに格納してくれるようになるみたいです。%%

%%これが、Mercurialでの日本語ファイル名の救世主になるか…。本家はバンバン取り入れて欲しい。%%

開発が断念されたみたいです…。
(混乱するので記事削除しました)

*[ネタ]その他の解決策1 [#sd9476d5]
Python 3000までまつ!
次期Python はUNICODEがベースになっているそうです。

*[けっこうマジメな話]その他の解決策2 [#o67e70e1]
Bazaarに移行する。噂によるとbzrは大丈夫らしいゾ。
%%構造上はいいらしいけど、実際はいまんとこbzrも駄目っぽい。特にWindows%%

このページのwiki筆者はBazaarに移行しました。

%%このページのwiki筆者はBazaarに移行しました。%%
→cygwin 1.7だとUTF-8で入れられるのでまたhgを使ってみてます。(gitm)
*参考リンク [#i054cf27]
-[[TortoiseHg で日本語ファイル名 - あすかぜ・ねっと:http://www.asukaze.net/etc/vcs/hg-fixutf8.html]]
''現状が非常によくまとまってます。''
win32mbcsと、hg-fixutf8など日本語ファイル名、問題の原因についても記述有り
-TotoiseHg公式wiki
[[kuy / thg-ja / wiki / Japanese — bitbucket.org:http://bitbucket.org/kuy/thg-ja/wiki/Japanese]]
#quotex(kuy / thg-ja / wiki / Japanese — bitbucket.org,http://bitbucket.org/kuy/thg-ja/wiki/Japanese){{
日本語ファイルを含むリポジトリを Windows と Linux で相互運用するといったケースについては Mercurial 側の対応が必須になるため TortoiseHg 側ができることはありませんのでそれを待つスタンスとします。
}}
だめだww
-[[2ch検索: [バージョン管理システム]:http://find.2ch.net/?STR=%A5%D0%A1%BC%A5%B8%A5%E7%A5%F3%B4%C9%CD%FD%A5%B7%A5%B9%A5%C6%A5%E0]]
最新情報やわからないことは、2chの"バージョン管理システムについて語るスレ"で聞いたほういいと思う。
----
#pcomment(,reply)

TIME:"2010-07-18 (Sun) 18:13:08" REFERER:"http://tobysoft.net/wiki/index.php?cmd=edit&page=Mercurial%2F%C6%FC%CB%DC%B8%EC%A5%D5%A5%A1%A5%A4%A5%EB%CC%BE%A1%A2%C6%FC%CB%DC%B8%EC%A5%B3%A5%DF%A5%C3%A5%C8%A5%ED%A5%B0%B4%D8%B7%B8&id=o67e70e1" USER_AGENT:"Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729)"
Front page   Edit Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes