Apakah git tidak case sensitive?

96

Pada komitmen pertama parsial saya disebut _Electronicsditulis diawali dengan huruf kapital, kemudian saya ubah menjadi _electronics.

Git di bawah cygwin mengabaikan kasus ini setelah melakukan nama baru, jadi saya mengubah nama secara manual di repo target.

Sekarang terkadang mengubah _electronicssebagian yang dikomit menjadi _Electronics.

Apa yang telah saya lakukan salah?

JAkk
sumber
9
Anda menggunakan OS apa?
Keith Thompson
10
Sistem file apa yang Anda gunakan?
Andrew Marshall
Windows dengan cygwin. Server saya menjalankan Ubuntu Linux. Tidak tahu sistem file, saya kira ext3 atau ext2 - penyedia saya mengkonfigurasi instalasi minimal.
JAkk
Tidakkah Anda senang Windows memutuskan untuk tidak peka huruf besar-kecil?
Cascabel
4
Windows tidak membedakan huruf besar / kecil, tetapi terkadang (lebih sering saat ini) mempertahankan huruf besar / kecil .
Arafangion

Jawaban:

73

Ini akan dilihat sebagai 2 hal yang berbeda tetapi akan menyebabkan masalah Anda pada sistem yang tidak peka huruf besar-kecil. Jika demikian, pastikan Anda melengkapi tab jalur atau nama file apa pun. Selanjutnya, untuk mengubah nama sesuatu hanya dalam kasus ini, lakukan ini:

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

Ini adalah cara eksplisit untuk membuat perubahan yang mengikatnya, lalu menciutkan komit. Cara yang lebih singkat untuk melakukannya adalah dengan memanipulasi indeks dan folder kerja sekaligus:

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

Ini juga terkait dengan menyesuaikan nama direktori: git mv dan hanya mengubah kasus direktori

Adam Dymitruk
sumber
Sepertinya ini benar (kecuali bahwa saya mengubah dari huruf kapital menjadi huruf kecil)
JAkk
Saya mengintip ke dalamnya, selama saya terbiasa dengan cygwin, akan lebih nyaman menggunakan cygwin - terima kasih atas petunjuknya
JAkk
Anda bisa melakukannya git mv file.txt File.txt. Tidak yakin apakah ini adalah fitur git baru.
Phil
107

Ini akan tergantung pada nilai core.ignorecasekonfigurasi, yang disetel ke false dalam sistem berkas case-sensitive dan true di msysgit pada Windows.

core.ignorecase

Jika benar, opsi ini memungkinkan berbagai solusi untuk mengaktifkan git agar bekerja lebih baik pada sistem file yang tidak peka huruf besar kecil, seperti FAT. Misalnya, jika daftar direktori menemukan "makefile" ketika git mengharapkan "Makefile", git akan menganggap itu benar-benar file yang sama, dan terus mengingatnya sebagai "Makefile".

Standarnya salah, kecuali git-clone (1) atau git-init (1) akan menyelidiki dan menyetel core.ignorecase true jika sesuai saat repositori dibuat.

Lebih detail dalam balasan ini untuk Mengubah kapitalisasi nama file di Git .

manojlds
sumber
79
Ini adalah jawaban yang benar imo. Untuk masa depan saya, gunakan git config --unset-all core.ignorecase && git config --system core.ignorecase falsedengan sudo.
Znarkus
2
ditto ke James, @Znarkus telah mengidentifikasi perbaikan untuk masalah ini di OS X, Terima kasih!
Craig Nakamoto
1
@Znarkus Bekerja pada Windows juga. Cantik.
orlade
9
@Znarkus, masalah dengan melakukan itu di OSX adalah ketika Anda mengganti nama file melalui finder, dan hanya mengubah kapitalisasi, git akan melihat versi yang diganti namanya sebagai file yang benar-benar baru, tetapi tidak menghasilkan "hapus" yang sesuai tindakan untuk versi lama file. Jadi jika Anda melakukan dan mendorong ke github, github akan memiliki file dengan nama lama dan file baru, tetapi sistem lokal Anda hanya akan memiliki file baru, dan git tidak akan lebih bijak.
ivanreese
2
@spiralganglion Untuk pengembang web di OSX, saya sangat menyarankan untuk membuat partisi yang peka huruf besar kecil dan kemudian memasangnya sebagai direktori www Anda.
Znarkus
23

Ini jauh lebih mudah:

git mv Electronics electronics -f
git commit -m "That was easy!"
Arnoud
sumber
1
Apakah Anda mencoba ini pada sistem file yang tidak peka huruf besar / kecil?
Edward Thomson
1
Awalnya saya membaca ini sebagai poster asli yang mencoba melakukan penggantian nama folder yang mengubah kasus, bukan file. Sekarang setelah saya membaca ulang ini, tidak jelas. Memang, mv -fakan bekerja untuk file.
Edward Thomson
21
git config --system core.ignorecase false
Cemo
sumber
0

Dalam skenario saya, saya memiliki dua folder testsdan Testsyang ditampilkan sebagai dua folder terpisah di Github tetapi satu Testsfolder di Windows. Tujuan saya adalah menggabungkan keduanya menjadi tests.

Saya menggunakan pendekatan berikut:

  1. Buat folder baru temp
  2. Salin semua konten dari Testsketemp
  3. Menghapus Tests
  4. menjalankan git rm Tests -r
  5. Ganti nama tempmenjaditests
Jeroen Vannevel
sumber
0

Saya telah mencoba menyelesaikan masalah dan berhasil di Windows10

Misalkan ada dua folder di bitbucket TEST dan test tetapi ketika saya mengkloning repo pada disk itu hanya membuat TEST dan saya ingin menyimpan tes sebagai folder tunggal di git yang berisi semua file.

Saya perlu menjalankan perintah berikut pada baris perintah git mv TEST test1 -f git mv text1 test -f git commit -m "renaming ..." git push

Sekarang Anda akan melihat bahwa hierarki folder diperbaiki pada bitbucket.

Nitesh Goyal
sumber