モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

MacとWindows混在でgit使ってる時の問題

世の中の主なOS、Unix系、Windows系、Mac系ではそれぞれ改行コードが違っています。
LinuxなどUnix系の改行コードは「LF」で、Windowsは「CRLF」、Macは「CR」(昔のOS9の頃まで。今のOSXUnix系なので「LF」)となぜかそれぞれ別になってしまっています。


自分はWindowsではSourceTreeでgitを使っているのですが、Linux上のスクリプト言語のソースは改行コードは普通LFにする必要があるため、SourceTreeのデフォルトのgitの設定では、commitする時に「CRLF」→「LF」に自動変換され、checkoutする時には逆に「LF」→「CRLF」に変換されるようになっています。


でもこれだと、なにも触ってないのに修正されているファイルとして上がってきてしまうことがあって、そしてしかたないからcommitしようとすると、変更されてないからcommitしなかったよみたいなこと言われて気持ち悪かったりします。


エディタのデフォルトの改行コードを「LF」にしてしまえば良い話なので、この自動変換をしないように設定出来ます。

git config --global core.autocrlf false

これで自動変換をしないようになります。


もう一つ、Macからgitで日本語ファイル名を扱うとき、これも触ってないのに新しくファイルを作ったと言われてしまうことがあります。
その現象が起きるのは条件があり、日本語ファイル名中に「バ」や「ぱ」といった濁点や半濁点が含まれている場合でした。


MacだとNFDと言う「バ」を「ハ」と「゛」に別けて保持する形式でファイル名が記録されます。
しかし他の環境で作られたリポジトリではNFCという「バ」は一文字の「バ」として保持する形式で記録されているため、ファイル名のコード的には違ってしまうので、あたらしいファイルが作られたことにされてしまうのです。


これはMacの場合にはNFCに変換するという設定にしておくことで解決できます。


Mac の Git で日本語ファイル名を扱うときは core.precomposeunicode = true にしておく - かわちょでぶろぐ
http://kawachodev.hatenablog.jp/entry/mac-git-core-precomposeunicode

git config --global core.precomposeunicode true


というか、この手の改行コードの違い、NFC/NFD、BOM有り無し、utf8とutf8mb4みたいな問題、いつか統一されてスッキリする日が来て欲しい…