WindowsでGitする時は大文字・小文字の罠に注意しよう

どうも、TOMOZO(@TOMOZO)です。

linux kernelのソースをWindowsでgit cloneしたら、何も手を加えていないのに衝突するファイルがあります。

なにもこれが普通ではありません。
衝突する原因はファイルシステムの大文字・小文字を区別するしないの違いです。

UNIX系のファイルシステムではファイルパスとして半角英字の大文字・小文字を区別しますが、Windowsのファイルシステムでは大文字・小文字を等価として扱うため、衝突が起きてしまうのです。

一応、解決策はあるみたい。
https://rcmdnk.com/blog/2013/06/18/computer-windows-mac-linux/

ただ、めんどうなのでやらないし、やる必要も無いのでやめておく。

この状態でわけも分からずコミットしてはいけない。
する人はいないだろうけど・・。

補足.Windowsのファイルシステムについて

FATとexFATは大文字・小文字を区別しない。

NTFSはファイルシステムレベルでは大文字小文字を区別しているらしいが、旧バージョンのWindowsとの互換性のため、Windows API使用時は大文字・小文字を区別しない挙動らしい。(NTFSが大文字・小文字を区別する挙動をするのは、UNIX系のAPIを使っている時)

補足.Windows Subsystem for Linux(WSL)

Windowsで見るファイルもWSLで見るファイルも同じNTFSボリュームのファイルであるが、WSL側ではWindows側と比べて以下の違いがある。

・MAX_PATHの影響を全く受けない
・ ファイルパスはcase-sensitive
・ symlinkが張れる(NTFSのシンボリックリンクとは別物)

https://qiita.com/lefb766/items/ca2be2590bd7c22395fd

「case-sensitive」とあるのでWSLは大文字と小文字を区別する。

スポンサーリンク