- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

はじめに Edit

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

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

勘違いしてました。今まで日本語ファイル名はそもそも駄目だったみたいです。
リポジトリにUTF-8でファイル名を入れるためのhg-fixutf8拡張が必要な模様。

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

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

ちなみに、この手の最新情報は、2chのバージョン管理システムを語るスレが新しいです。質問とかもできます。

現状確認 Edit

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

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

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

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

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

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

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

↓こんな話があります

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でも表示されます。
via: バージョン管理システムについて語るスレ4

そもそも日本語ファイル名はヤバァイ感じ Edit

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

TortoiseHgは日本語ファイル名ダメポ!! Edit

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

つまり、

TortoiseHgで化けてないから日本語ファイル名大丈夫だろう

そのまま追加、コミットする

他の環境で化けてる!

ってなります。

コマンドラインhg駄目 Edit

hg-fixutf8を入れる前に試した実験な話です

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

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

hg commitの例:

>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       # いけたみたいだけど、多分ヤバイ…
> 

解決策 Edit

UTF-8環境でcygwin mercurialを使う Edit

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

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

(詳細は要確認!!)

win32mbcs拡張を有効にする Edit

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

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

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

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

[extensions]
hgext.win32text=
hgext.win32mbcs=

[encode]
** = cleverencode:

[decode]
** = cleverdecode:

参考:TortoiseHGのカスタマイズ(好きなdiffツールを割り当てる等) - ふにゃるん

あれ?TortoiseHg 0.7ではエラーが出て動かなくなった気がします??
エラーメッセージ

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)で解決できること Edit

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

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

この設定(win32mbcs)で解決できないこと Edit

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

hg-fixutf8拡張を組み込む Edit

hg-fixutf8を使うと、ファイル名をUTF-8でリポジトリに格納してくれるようになるみたいです。

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

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

[ネタ]その他の解決策1 Edit

Python 3000までまつ!
次期Python はUNICODEがベースになっているそうです。

[けっこうマジメな話]その他の解決策2 Edit

Bazaarに移行する。噂によるとbzrは大丈夫らしいゾ。
構造上はいいらしいけど、実際はいまんとこbzrも駄目っぽい。特にWindows

このページのwiki筆者はBazaarに移行しました。
→cygwin 1.7だとUTF-8で入れられるのでまたhgを使ってみてます。(gitm)

参考リンク Edit


Show recent 10 comments. Go to the comment page.

  • どうやら、最新のMercurialでコマンドラインからコミットする分には問題ないようです。TortoiseHgでのFixのスケジュールは未定のようですが。 -- heart-rhythm? 2010-02-24 (Wed) 16:37:05
    • 確認したいのですが、最新のというのはバージョンいつのMercurialでしょうか。ファイル名の問題が解決されたという情報が入ってきていないので…。
      ここに書き忘れていたのですが、UTF-8のCygwinとコマンドラインのMercurialではイケルっぽい(UTF-8で扱ってくれるため)ですね。そのことかな? -- TOBY 2010-03-03 (Wed) 22:50:01
  • UTF-8に対応された cygwin 1.7 でMercurial使う方法を解決策として追記しました。 -- TOBY 2010-05-15 (Sat) 19:47:17
Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2010-07-18 Sun 18:13:09 JST (3072d)