お世話になります。藤澤です。
ぼくは普段 Git のクライアントに SourceTree を使ってるんですが、ある日突然、変更していないはずのファイルが untracked として表示されるようになってしまいました。
作業ツリーをいつもキレイにしておきたい派としては これは非常に気になります。
というわけでちょっと腰を据えてこいつと格闘してみました。
ファイル名を変えてみる
ファイル名に "*" が含まれてるせいかな、ということでファイル名を変えてみます。
これを index に add しようとするとエラーが。
おまけに変更をリセットしようとしても同様のエラーが出て元に戻すことすらできません。
(仕方ないので「ローカルの変更を破棄」オプション付きでブランチを切り替えて元に戻しました)
とりあえず commit してみる
試しにテスト用のブランチを切って commit してみると作業ツリーからは消えてくれましたが、Github のサイト上で確認すると同名のファイルが 2 つに。
さらにこの状態でファイルを削除すると、2 ファイルとも削除したことになってしまいました。
コマンドラインで確認してみる
SourceTree 上では何が起こってるか分からないので、コマンドラインから git status してみます。
日本語が文字化けしていますが、状況としては SourceTree 上で見たものと変わらないようです。
その後いろいろ格闘していると、ファイル名の変更前後で文字コードが微妙に変わっているのに気がつきました。
そういえば El Captan から濁点の扱いが変わったというようなニュースを見た気がしますが、その影響でしょうか。
Mac 濁点問題
そこで "Mac 濁点" で先生に聞いてみるといろいろ出てきます。要約すると「濁点を含めて一文字として扱うのが一般的だけど Mac は濁点が独立して一文字になっている」ということのようです。
Git 上でこの問題を解消するには "core.precomposeunicode" を true にしてあげればよい、とのことなのですが、
すでに true になっていました……。
Github のサイト上からファイルを直接削除
これはもう Windows とかからアクセスしてリネームするしかないのかな、と思いながらウロウロしていたところ、Github のサイト上から直接ファイルを消すことができました。
その後、ローカルのファイルをリネームして commit したところ、無事に反映されました。
以上、やっぱり日本語ファイル名は使うべきじゃないな、と思ったできごとでした。