Saya telah berubah nama beberapa file dengan de-mengkapitalisasi huruf pertama, seperti dalam Name.jpg
untuk name.jpg
. Git tidak mengenali perubahan ini dan saya harus menghapus file dan mengunggahnya lagi. Apakah ada cara agar Git peka terhadap huruf besar-kecil saat memeriksa perubahan nama file? Saya belum membuat perubahan pada file itu sendiri.
git
case-sensitive
git-commit
git-config
Gil Shulman
sumber
sumber
git mv
karya sederhana .Jawaban:
Anda dapat menggunakan git mv :
sumber
-f
bendera.-f
beralih dengan git terbaru (2.18) jika tidak, anda bisa mendapatkanfatal: destination exists
kesalahan.Git memiliki pengaturan konfigurasi yang mengatakan itu apakah menjadi kasus sensitif atau tidak sensitif:
core.ignorecase
. Untuk memberi tahu Git sebagai case-senstive, cukup setel pengaturan ini kefalse
:Dokumentasi
Dari
git config
dokumentasi :Sistem file case-insensitive
Dua sistem operasi paling populer yang memiliki sistem file case-insensitive yang saya tahu adalah
sumber
false
pada sistem file case-insensitive adalah ide yang buruk . Ini belum tentu jelas. Sebagai contoh, saya baru saja mencoba ini di Mac saya, berpikir itu akan memperbaiki masalah saya, kemudian mengganti nama file dariproductPageCtrl.js
menjadiProductPageCtrl.js
.git status
melihat file baru bernamaProductPageCtrl.js
tetapi tidak berpikir yangproductPageCtrl.js
telah dihapus. Ketika saya menambahkan file baru, melakukan, dan mendorong ke GitHub, repo GitHub sekarang berisi kedua file meskipun repo lokal saya (seharusnya up to date) hanya punya satu.git mv
untuk memindahkan file dan melihat bagaimana git mengelolanya. Jika Anda memindahkan file tanpa git, tidak ada yang bisa dilakukan git karena sistem file tidak mengatakan yang sebenarnya kepada git. Ini adalah masalah ntfs / fat / hfs dan sejenisnya dan bukan git / linux.Menggunakan SourceTree, saya bisa melakukan ini semua dari UI
FILE.ext
menjadiwhatever.ext
whatever.ext
menjadifile.ext
Agak membosankan, tetapi jika Anda hanya perlu melakukannya pada beberapa file, itu cukup cepat
sumber
Inilah yang saya lakukan pada OS X:
Dua langkah karena kalau tidak saya mendapat kesalahan "file exist". Mungkin itu bisa dilakukan dalam satu langkah dengan menambahkan
--cached
atau semacamnya.sumber
-f
(gaya) adalah bendera yang Anda cari-f
flag tidak membantu jika FS yang mendasari adalah case-sensitive. Namun, solusi dua langkah berhasil untuk saya-f
bekerja! Terima kasih atas tipnya-f
bendera.git -c "core.ignorecase=false" add .
akan mempertimbangkan file yang kasusnya telah diubah untuk komit.Terkadang berguna untuk sementara mengubah sensitivitas kasus Git:
Metode # 1 - Ubah sensitivitas case untuk satu perintah:
git -c core.ignorecase=true checkout mybranch
untuk mematikan sensitivitas huruf untuk satucheckout
perintah. Atau lebih umum: . (Kredit untuk VonC untuk menyarankan ini di komentar.)git -c core.ignorecase=
<<true or false>>
<<command>>
Metode # 2 - Ubah sensitivitas case untuk beberapa perintah:
Untuk mengubah pengaturan lebih lama (mis. Jika beberapa perintah harus dijalankan sebelum mengubahnya kembali):
git config core.ignorecase
(ini mengembalikan pengaturan saat ini, misalnyafalse
).git config core.ignorecase
<<true or false>>
- atur pengaturan baru yang diinginkan.git config core.ignorecase
<<false or true>>
- atur nilai konfigurasi kembali ke pengaturan sebelumnya.sumber
git -c core.ignorecase=<true or false> checkout <<branch>>
? Tidak ada yang mengatur ulang setelah.Di bawah OSX, untuk menghindari masalah ini dan menghindari masalah lain dengan mengembangkan pada kasus-sensitif filesystem, Anda dapat menggunakan Disk Utility untuk membuat kasus sensitif drive virtual / disk image.
Jalankan utilitas disk, buat disk image baru, dan gunakan pengaturan berikut (atau ubah sesuka Anda, tetapi tetap perhatikan huruf besar-kecil):
Pastikan untuk memberi tahu git bahwa ini ada pada kasus sensitif FS:
sumber
Saya mencoba solusi berikut dari jawaban lain dan tidak berhasil:
git mv filename
git rm -f filename
Jika repositori Anda di-host dari jarak jauh (GitHub, GitLab, BitBucket), Anda dapat mengubah nama file asalnya (GitHub.com) dan memaksanya mengganti nama file dengan cara top-down.
Instruksi di bawah ini berkaitan dengan GitHub, namun ide umum di baliknya harus berlaku untuk platform hosting repositori jarak jauh. Ingatlah jenis file yang Anda coba ubah namanya, yaitu apakah itu tipe file yang dianggap GitHub dapat diedit (kode, teks, dll.) Atau tidak dapat diedit (gambar, biner, dll) di dalam browser.
branchname
tombol radio "Komit langsung ke cabang" dipilih dan klik tombol "Komit perubahan"branchname
tombol radio "Komit langsung ke cabang" dipilih dan klik tombol "Komit perubahan"sumber
Mirip dengan jawaban @ Sijmen, inilah yang bekerja untuk saya di OSX ketika mengganti nama direktori (terinspirasi oleh jawaban ini dari posting lain):
Cukup melakukan
git mv CSS css
memberi kesalahan argumen yang tidak valid:fatal: renaming '/static/CSS' failed: Invalid argument
mungkin karena sistem file OSX adalah case-sensitiveps BTW jika Anda menggunakan Django, collectstatic juga tidak akan mengenali perbedaan kasus dan Anda harus melakukan di atas, secara manual, di direktori root statis juga
sumber
1) ganti nama file
Name.jpg
menjadiname1.jpg
2) melakukan file yang dihapus
Name.jpg
3) ganti nama file
name1.jpg
menjadiname.jpg
4) mengubah file yang ditambahkan
name.jpg
ke komit sebelumnyasumber
fatal: bad source, source=name1.jpg, destination=name.jpg
pada langkah 3. Apakah Anda punya saran? Thxgit add
.Saya menggunakan langkah-langkah berikut:
Bagi saya adalah solusi sederhana
sumber
Kita dapat menggunakan perintah git mv. Contoh di bawah ini, jika kita mengganti nama file abcDEF.js menjadi abcdef.js maka kita dapat menjalankan perintah berikut dari terminal
sumber
Mac OSX High Sierra 10.13 memperbaikinya. Buat saja partisi APFS virtual untuk proyek git Anda, secara default ia tidak memiliki batas ukuran dan tidak membutuhkan ruang.
Sensitive
git
danln -s /Volumes/Sensitive/git /Users/johndoe/git
Drive Anda akan masuk
/Volumes/Sensitive/
Bagaimana cara saya melakukan hanya perubahan nama file case-sensitive dalam Git?
sumber
Saya telah menghadapi masalah ini beberapa kali di MacOS. Git peka huruf besar-kecil tetapi Mac hanya melindungi huruf.
Seseorang mengkomit file:
Foobar.java
dan setelah beberapa hari memutuskan untuk mengganti namanyaFooBar.java
. Ketika Anda menarik kode terbaru itu gagalThe following untracked working tree files would be overwritten by checkout...
Satu-satunya cara yang dapat diandalkan yang pernah saya lihat yang memperbaiki ini adalah:
git rm Foobar.java
git commit -m 'TEMP COMMIT!!'
git rebase --continue
git rebase -i HEAD~2
dandrop
yangTEMP COMMIT!!
FooBar.java
sumber
Ketika Anda telah melakukan banyak penggantian nama file dan beberapa di antaranya hanya merupakan penggantian casing, sulit untuk mengingat yang mana. secara manual "git pindahkan" file tersebut dapat bekerja. Jadi apa yang akan saya lakukan selama tugas perubahan nama file adalah:
Ini akan memperbaiki semua masalah kasing tanpa mencoba mencari tahu file atau folder mana yang Anda ganti namanya.
sumber
git commmit --amend
di dalam paragraf 4? Jika tidak, akan ada komitmen ekstra dengan penghapusan semua file. Atau Anda bisa menggunakannyagit rebase -i
dengan squash.Jika tidak ada yang berhasil, gunakan nama file git rm untuk menghapus file dari disk dan menambahkannya kembali.
sumber
Saya mengambil jawaban @CBarr dan menulis Skrip Python 3 untuk melakukannya dengan daftar file:
sumber