GITはファイルの大文字小文字をデフォルトで判断しないから起きるトラブル

2021/05/31

git テクノロジー

t f B! P L
eyecatch GIT管理で、まだまだ覚えることの多いことを実感している、弓削田です。 先日、とあるwebサービスを仕事で構築して本番公開したあとで、 ファイル名が間違っていることに気が付き、ファイル修正をしたところ、 修正したはずのファイルがnot foundになってしまって、よくみたら、 本番のファイル名が修正されていなかったということが、発端です。 ローカル環境でファイル名を修正して、gitでコミットして、 それをリポジトリサーバーにpushして、本番で、そのコミットをpullする。 この流れに手落ちはないはずです。

原因究明

本番で何度pullしても最新バージョンであるというメッセージが返ってくるだけで、 とりあえず、gitに登録されているファイル名を見てみることにした。 $ git ls-files このコマンドで、登録されているファイル一覧が表示される。 すると、修正したはずのファイルが大文字のままになっていることがわかった。 ググってみると、どうやら、gitはデフォルトでは、ファイルの大文字小文字は判定されないようだ。 ファイル名を変更する時に、そのファイルの内容も改行を入れたり、コメントを入れたりして、ちゃんとコミットできるようにしたら、 ファイル名の大文字小文字も適正に保存されるのかと思いきや・・・ あまりうまくいかないので、このやりかたは要注意! ファイルを一旦別の名前にして、コミットして、 再度適正なファイル名に変更し直して、再登録したら、 これはうまくいくけど、無駄なコミットをするハメになるので、あまりオススメできない。

対応方法

どうやら、configファイルをデフォルトの大文字小文字を認識しない状態から、 認識する状態に設定変更をして上げる必要がある。 $ git config core.ignorecase false このコマンドだ。 そして、切り替わっているかどうか確認するのは、次のコマンド git config -l --local | grep core.ignorecase これで、デフォルトは、trueになっているのをfalseに切り替えてあげるといいというわけだ。 あ、設定変更したら、ちゃんとコミットして、configも更新してあげてくださいね。

このデフォルト設定の意味

でも、そもそも、何故大文字小文字をignore設定にしているのがデフォルトなのだろう? なにか意味があるに違いない。 だって、OSによって、ファイル名の文字列が大文字と小文字の判別をするしないという違いはあるけど、 少なくとも、webでアクセスする時や、プログラムの参照ファイルなどで、大文字小文字を明確に区別されることのほうが通常だと思うのだが、 大文字小文字をあえて区別しないのは、やはりwindowsとmacOSのこの2つが区別しないからなのかもしれない! でも、システム側でそれをデフォルトにするというのは、いかがなものか・・・ もしかしたらもっと深い原因があるかもしれないが、この仕様はいただけないから、デフォルトを是非ともfalseにしてもらいたいし そもそも、この設定って、いらんでしょ・・・ という風に個人的に思った。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ