Saya telah mengubah beberapa file dengan nama de-gunakan huruf besar pada huruf pertama, seperti dalam Name.jpg
untuk name.jpg
. Git tidak mengenali perubahan ini dan saya harus menghapus file dan meng-upload mereka lagi. Apakah ada cara bahwa Git dapat menjadi hal yang sensitif ketika memeriksa perubahan nama file? Saya tidak membuat perubahan ke file itu sendiri.
Anda dapat menggunakan git mv:
git mv -f OldFileNameCase newfilenamecase
Git memiliki pengaturan konfigurasi yang mengatakan itu apakah harus peka atau tidak peka: inti.ignorecase
. Untuk memberitahu Git untuk kasus-senstive, hanya mengatur pengaturan ini untuk palsu
:
git config core.ignorecase false
Dari git config
dokumentasi:
inti.ignorecase
Jika benar, opsi ini memungkinkan berbagai workarounds untuk mengaktifkan git untuk bekerja lebih baik pada filesystem yang tidak peka, seperti LEMAK. Sebagai contoh, jika sebuah daftar direktori menemukan
makefile
ketika git mengharapkanMakefile
, git akan menganggap itu adalah benar-benar file yang sama, dan terus mengingatnya sebagaiMakefile
.
default adalah palsu, kecuali git-clone(1) atau git-init(1) akan melakukan penyelidikan dan menetapkan
inti.ignorecase
benar jika sesuai ketika repositori dibuat.
Dua sistem operasi yang paling populer yang memiliki kasus-sensitif sistem file yang saya tahu adalah
Menggunakan SourceTree saya mampu melakukan ini semua dari UI
FILE.ext
untuk apapun.ext
apa pun.ext
untuk file.ext
It's sedikit membosankan, tetapi jika anda hanya perlu melakukan itu untuk beberapa file's cukup cepat
Ini adalah apa yang saya lakukan pada OS X:
git mv File file.tmp
git mv file.tmp file
Dua langkah karena jika aku punya satu "ada file" error. Mungkin hal itu dapat dilakukan dalam satu langkah dengan menambahkan --cached
atau semacamnya.
Kadang-kadang dapat berguna untuk sementara perubahan Git's sensitifitas. Ada 2 cara untuk melakukan hal ini...
Metode #1 - Mengubah sensitifitas untuk satu perintah:
git -c inti.ignorecase=true checkout mybranch
untuk mematikan hal-sensitivitas untuk single checkout
perintah. Atau lebih umumnya: git -c inti.ignorecase=
<<true atau false>>
<<command>>
. (Kredit untuk VonC untuk menunjukkan ini di komentar.)
Metode #2 - Mengubah sensitifitas untuk beberapa perintah:
Untuk mengubah pengaturan untuk waktu yang lebih lama (misalnya, jika ada beberapa perintah yang harus dijalankan sebelum berubah kembali):
git config core.ignorecase
(ini akan mengembalikan pengaturan saat ini, misalnya, false
).git config core.ignorecase
<<true atau false>>
- mengatur diinginkan pengaturan baru.git config core.ignorecase
<<palsu atau benar>>
- mengatur konfigurasi nilai kembali ke pengaturan sebelumnya.Di bawah OSX, untuk menghindari masalah ini dan menghindari masalah-masalah lain dengan mengembangkan pada kasus-sensitif filesystem, anda dapat menggunakan Disk Utility untuk membuat kasus sensitive virtual drive / disk image.
Jalankan disk utility, membuat disk image, dan menggunakan pengaturan berikut (atau perubahan seperti yang anda suka, tapi tetap case sensitive):
Pastikan untuk memberitahu git sekarang adalah sebuah hal yang sensitif FS:
git config core.ignorecase false
Aku mencoba solusi berikut dari jawaban yang lain dan mereka didn't bekerja:
Jika repositori anda adalah host dari jarak jauh (GitHub, GitLab, BitBucket), anda dapat mengubah nama file pada asal (GitHub.com) dan memaksa mengubah nama file dalam sebuah top-down dengan cara.
Petunjuk di bawah ini berkaitan dengan GitHub, namun ide umum di belakang mereka harus berlaku untuk setiap repositori jauh-platform hosting. Perlu diingat jenis file anda're mencoba untuk mengubah hal-hal, yang, apakah itu's jenis file yang GitHub dianggap sebagai diedit (kode, teks, dll) atau diedit (gambar, biner, dll) dalam satu browser.
branchname
cabang" tombol radio dipilih dan klik "Melakukan perubahan" tombolbranchname
cabang" tombol radio dipilih dan klik "Melakukan perubahan" tombolMirip dengan @Sijmen's jawaban, ini adalah apa yang bekerja untuk saya pada OSX ketika mengganti nama direktori (terinspirasi oleh ini jawaban dari pos lain):
git mv CSS CSS2
git mv CSS2 css
Hanya melakukan git mv CSS css
memberi argumen tidak valid error: fatal: nama '/static/CSS' gagal: tidak Valid argumen` mungkin karena OSX's file sistem adalah case sensitive
p.s BTW jika anda menggunakan Django, collectstatic juga tidak't mengenali kasus perbedaan dan anda'd harus melakukan hal di atas, secara manual, dalam statis direktori root juga
Mac OSX High Sierra 10.13 perbaikan ini agak. Hanya membuat virtual APFS partisi untuk anda git proyek, secara default tidak memiliki batas ukuran dan tidak mengambil ruang.
Sensitif
git
dan ln-s /Volume/Sensitif/git /Pengguna/johndoe/git
Drive anda akan berada di /Volume/Sensitif/
I've menghadapi masalah ini beberapa kali pada MacOS. Git adalah kasus sensitif tapi Mac hanya kasus melestarikan.
Seseorang melakukan file: Foobar.java
dan setelah beberapa hari memutuskan untuk mengubah FooBar.java
. Ketika anda menarik terbaru kode itu gagal dengan berikut ini terpantau bekerja pohon file akan ditimpa oleh checkout...
Satu-satunya cara yang dapat diandalkan yang saya've terlihat bahwa perbaikan ini adalah:
git rm Foobar.java
git commit-m 'TEMP KOMIT!!'
git rebase-terus
git rebase -aku KEPALA~2
dan drop
TEMP KOMIT!!
FooBar.java
Bila anda've dilakukan banyak nama file dan beberapa dari itu adalah hanya sebuah perubahan dari casing,'s sulit untuk ingat yang mana. manual "git bergerak" file dapat cukup beberapa pekerjaan. Jadi apa yang akan saya lakukan selama saya mengubah nama file tugas:
Hal ini akan memperbaiki semua kasus masalah tanpa berusaha untuk mencari tahu file atau folder yang akan diubah namanya.
Aku mengambil @CBarr menjawab dan menulis Script Python 3 untuk melakukannya dengan daftar file:
``python
impor os impor shlex impor subproses
def run_command(absolute_path, command_name): print( "Berjalan", command_name, absolute_path )
perintah = shlex.split( command_name ) command_line_interface = subproses.Popen( perintah, stdout=subproses.PIPA, cwd=absolute_path )
output = command_line_interface.berkomunikasi()[0] cetak( output )
jika command_line_interface.returncode != 0: meningkatkan RuntimeError( "Sebuah proses keluar dengan kesalahan '%s'..." % ( command_line_interface.returncode ) )
def main(): FILENAMES_MAPPING = \ [ (r"F:\SublimeText\Data" r"README.MD" r"README.md"), (r"F:\SublimeText\Data\Packages\Alignment" r"readme.md" r"README.md"), (r"F:\SublimeText\Data\Packages\AmxxEditor" r"README.MD" r"README.md"), ]
untuk absolute_path, oldname, newname di FILENAMES_MAPPING: run_command( absolute_path, "git mv '%s' '%s1'," % ( oldname, namabaru ) ) run_command( absolute_path, "git add '%s1'," % ( namabaru ) ) run_command( absolute_path, "git commit-m 'Dinormalisasi \'%s\' dengan kasus-sensitif nama'," % ( namabaru ) )
run_command( absolute_path, "git mv '%s1' '%s'," % ( namabaru, namabaru ) ) run_command( absolute_path, "git add '%s'," % ( namabaru ) ) run_command( absolute_path, "git commit-mengubah-tidak-edit" )
if name == "utama": main() ``