Masalah Case Sensitive pada Git Windows
Table of Contents
Well di liburan semester tahun ini, saya memfokuskan diri untuk meningkatkan soft skill salah satunya yaitu membuat side project untuk mengisi portofolio. Setelah saya selesai mengoding dan siap di push ke Github. Saya menemukan hal yang janggal.
Hmm aneh kenapa nama file nggak berubah di Github perasaan tadi sudah direname dah.
Setelah diusut ternyata filesystem pada Windows bersifat case-insensitive (berbeda dengan OS Linux yang bersifat case-sensitive). *Hmm pantesan
Apa itu case insensitive dan case sensitive?
Buat kamu yang belum tahu case-sensitive adalah istilah yang digunakan untuk menyatakan bahwa huruf besar dan huruf kecil dianggap berbeda. Misalnya, “A” dan “a” atau “b” dan “B” dianggap dua karakter yang berbeda. Sebaliknya case insensitive yang menganggap huruf besar maupun kecil sama.
Windows memperlakukan semua nama file dan folder sebagai case insensitive, ketika kita merubah nama file misalnya Readme.md diubah ke README.md Windows masih menganggap file tersebut sama sehingga Git tidak bisa mengenali perubahan nama file.

Ok mari kita latihan dengan project sederhana, anggap saja kita punya project web HTML sederhana yang berisi file dan folder pada gambar di bawah.

Mari kita coba rename file Readme.md menjadi README.md lalu cek status perubahan dengan perintah git status. Ternyata tidak terjadi perubahan apapun walaupun filenya sudah direname.
$ git status
On branch master
nothing to commit, working tree clean
Bagaimana cara mengatasinya?
Menggunakan git mv
Cara sederhana untuk merubah nama 1 file kita bisa menggunakan perintah git mv beserta nama file yang kita inginkan
git mv Readme.md README.md
Bisa kita lihat nama file yang sebelumnya Readme.md telah diubah oleh Git menjadi README.md dan berubah warna dengan flag R (Renamed), yang artinya perubahan nama file tersebut sudah dikenali oleh Git.

Ketika dicek lewat dengan git status hasilnya pun sama sesuai dengan yang kita harapkan.
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: Readme.md -> README.md
Tapi sayangnya perintah ini tidak bisa digunakan untuk merename folder. Misalnya jika kita ingin merubah nama folder css menjadi CSS maka akan gagal.
$ git mv css CSS
Rename from 'css' to 'CSS/css' failed. Should I try again? (y/n)
Menggunakan git rm --cached
Cara ini adalah cara yang paling mudah untuk mengubah nama file yang banyak sekaligus. Pertama kita perlu me-rename semua folder atau file. Disini kita coba rename folder css dan js menjadi kapital di huruf depannya saja.

lalu jalankan perintah :
$ git rm -r --cached .
$ git add .
And boom, semua perubahan file dan folder yang sudah direname sebelumnya telah dikenali oleh Git.

Lah kok bisa? Perintah git rm -r --cached . tadi digunakan untuk menghapus semua cache folder atau file yang ditracking oleh Git.
Setelah itu kita menambahkan semua file dan folder ke staged changes dengan perintah git add . sehingga hal ini menyebabkan Git akan mencari ulang semua perubahan dari awal daripada menggunakan cache.
Well itu saja yang bisa saya sampaikan cukup sekian dari blog saya semoga bisa bermanfaat kalau ngalamin hal yang sama seperti saya. Terima kasih juga kepada Adam Johnson karena telah menulis blog yang membantu masalahku.
Dan juga sesuai tulisannya tidak direkomendasikan mengubah konfigurasi Git core.ignoreCase walaupun ada banyak orang yang merekomendasikannya karena bisa saja akan terjadi hal yang tidak diinginkan pada Git. Setelah saya coba hal ini malah menyebabkan file yang direname menjadi duplikat yang mana ini bukanlah best practice.