本文へスキップ
メニュー
テーマ

Gitでファイル名の大文字、小文字を区別する

目次

macOSやWindowsでは、readme.txtをREADME.txtに変えるように、ファイル名の大文字・小文字だけを変更しても、Gitが変更として検知しません。Gitの設定core.ignorecaseをfalseにすると、検知されるようになります。

設定方法

リポジトリのフォルダで、以下のコマンドを実行します。--localを付けているので、設定はそのリポジトリだけに適用されます。

ターミナルbash · 1行
git config --local core.ignorecase false

今の設定は、以下のコマンドで確認できます。

ターミナルbash · 1行
git config core.ignorecase

検知されない理由

macOS(APFS)やWindows(NTFS)のファイルシステムは、標準ではファイル名の大文字と小文字を区別しません。Gitは、git initやgit cloneでリポジトリを作るときにファイルシステムを調べ、大文字と小文字を区別しない環境ではcore.ignorecaseをtrueに設定します。この設定がtrueのあいだは、大文字・小文字だけが違うファイル名を同じファイルとして扱います。

falseにしたときの注意点

core.ignorecaseをfalseにしてからファイル名を変えてgit addすると、新しい名前のファイルが追加されるだけで、古い名前のファイルもGitの管理に残ります(Git 2.55.0で確認)。

ターミナルbash · 3行
mv readme.txt README.txtgit add -Agit ls-files
テキストテキスト · 2行
README.txtreadme.txt

このままコミットすると、大文字と小文字を区別する環境(Linuxのサーバーなど)では、2つのファイルが別々に存在することになります。古い名前のファイルは、以下のコマンドでGitの管理から外します。

ターミナルbash · 1行
git rm --cached readme.txt
注意

Gitの公式ドキュメントには、core.ignorecaseはGitがOSやファイルシステムに合わせて設定する値で、変更すると予期しない動作になることがあると書かれています。

設定を変えずにファイル名を変更する

ファイル名の変更をgit mvでおこなえば、core.ignorecaseがtrueのままでも、大文字・小文字だけの変更が名前の変更として記録されます。設定を変える必要がなく、古い名前のファイルも残りません。

ターミナルbash · 1行
git mv readme.txt README.txt

参考・引用

この記事は役に立ちましたか?