git で大文字子文字を区別する方法
概要
Git を使っていたときに、ファイル名がa.txt
で管理していたものを、A.txt
に変更してもファイル名が変更されたことを検知されない問題があったので調査しました。
解決策
公式ドキュメントにもあるとおり、core.ignorecase
が true
だと大文字と小文字が区別されないらしい。
If true, this option enables various workarounds to enable Git to work better on filesystems that are not case sensitive, like FAT. For example, if a directory listing finds "makefile" when Git expects "Makefile", Git will assume it is really the same file, and continue to remember it as "Makefile".
The default is false, except git-clone[1] or git-init[1] will probe and set core.ignoreCase true if appropriate when the repository is created.
ですので、以下のコマンドでfalse
にすると解決される。
git config --global core.ignorecase false
また、子文字を大文字に変更しただけだと、ディレクトリやファイルがローカルリポジトリから削除されても、リモートリポジトリ(GitHub)に残ってしまうときがあります(逆もしかり)。
そんなときには以下のコマンドでリモートリポジトリから削除できます。
git rm -r ファイル名
FAT とは
気になる一文として、FATのように大文字と子文字を区別しない...(略)
がありました。
そこで FAT について調べてみました。
どうやら File Allocation テーブルの略で、MS-DOS のファイルシステムみたいです。
なぜ大文字と子文字を区別していないのかはわかりませんでしたが、可能性として開発当時のマシンスペックを考慮した軽量化のためかと考察しました。
それにしても、大文字と子文字を区別しないのは、UNIX ライクじゃないと思いました。
参考
Discussion