🌊

gitのignorecaseで注意したいこと

2022/12/05に公開

概要

ファイル名を大文字から小文字に直したときにgitが不思議な挙動をしたので記録しました。
ignorecaseを設定したその後のことがメインです。

作業記録

User.goからuser.goに変更してもgitには変更したファイルがないと認識されました。

どうやらgitではファイル名の大文字小文字の変更は認識されないようで設定を変更する必要があります。


$ git config -l --local | grep core.ignorecase
core.ignorecase=true

# ignorecaseをfalseにすると大文字小文字を認識する。
$ git config core.ignorecase false

ここからが本題
設定を変更したらgitに変更が認識されたのでいつもどおりpushしたところCIでエラーが発生。
どうやらgithub上だとビルドが通らなかったので確認してみると消したはずのファイルが存在しました。

User.go
user.go

通常は名前変更前のファイルが削除され、新しい名前のファイルがトラッキングされていない状態になります。

$ git status
On branch feat/import_csv
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    User.go

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        User1.go

no changes added to commit (use "git add" and/or "git commit -a")

今回の大文字小文字の変更は変更前のファイル名が削除認定されません。

$ git status
On branch feat/test
Your branch is up to date with 'origin/main'

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        user.go

ignorecaseを設定して、大叔父小文字だけを変えても通常のファイル名変更の動作をしないようです。

変更したいファイルを削除するコミットを挟む必要があるようです。

解決策

最終的に下記のように対応したほうがいいと思います。

  • ファイルを一旦削除 → commit → 名前を変更したファイルを追加 → commit
    • 多分これがおすすめ
  • Github上で直接ファイルを削除する
    • 正常動作しないコミットが残るのでおすすめしません。

参考

https://qiita.com/sawadashota/items/aa312a3b7e2403448efe
https://git-scm.com/docs/git-config/2.14.6#Documentation/git-config.txt-coreignoreCase

Discussion