Saya mengubah kapitalisasi direktori dan Git tampaknya tidak mengambilnya


139

Saya sedang mengembangkan proyek pada OS X Lion yang berada di bawah kendali versi Git. Saya memiliki direktori huruf kecil ini dan kemudian memanfaatkannya (mis. Emailaddresses => EmailAddresses), tetapi Git sepertinya tidak mengenali perubahannya. Masih menganggap direktori tersebut huruf kecil ketika saya menjalankan git ls-filesdan perintah lainnya.

Apakah ini tidak berbahaya, atau haruskah saya melakukan sesuatu yang lain untuk membuat Git memahami perubahan ini?



Ini menciptakan kebingungan bagi saya selama 2 hari. Sekarang saya mengerti. Thnx untuk pertanyaan ini
Number945

Jawaban:


199

Anda mungkin menggunakan case-sensitive (but case preserving) HFS +. Saya biasanya bekerja seperti ini:

$ git mv somename tmpname
$ git mv tmpname SomeName

1
Ini adalah masalah yang sama yang saya miliki, dan inilah yang saya lakukan.
fernferret

3
Punya masalah yang sama dengan alat Github untuk Windows. Sekali lagi solusi di atas dapat mengatasi masalah dengan baik: ganti nama menjadi file sementara di Windows Exploer, lalu - setelah melakukan - ganti nama menjadi nama akhir dengan case yang benar.
Jason

9
Atau lakukan dalam satu perintah: git mv --force somename SomeName (dari stackoverflow.com/a/16071375/217866 )
jackocnr

1
Agar perubahan tercermin dalam repo jarak jauh, Anda juga harus melakukannya git push origin master. Jika git menolak memperbarui remote, Anda mungkin perlu menambahkan file dummy (mis. touch stam) Dan melakukan push. Diikuti oleh penghapusan berikutnya dari stam dan tekan lagi.
Rahav

2
Satu hal yang perlu diperhatikan adalah Anda harus berada di folder tempat file ini berfungsi. Itu tidak jelas bagi saya pada awalnya dan saya terus mendapatkan >>> sumber yang buruk, sumber = nama, tujuan = tmpname <<< karena saya mencoba menjalankan perintah dari akar repo.
Parth Tamane

281

Anda dapat memberi tahu git untuk memperhitungkan kasus ini dengan menjalankannya

git config core.ignorecase false


4
Jawaban yang sangat bagus jika Anda telah mengubah nama file tanpa menggunakan git mv --force atau skrip CL lainnya. Terima kasih!
MeanMatt

4
Ini adalah jawaban yang unggul karena saya tidak merasa seperti git mv'ing 200 file yang diubah namanya secara manual!
Adam Reis

1
Setuju bahwa ini harus menjadi jawaban teratas. Terima kasih.
HomerPlata

1
untuk beberapa alasan itu menggandakan semua file, sekarang saya memiliki versi asli dan yang dengan kapitalisasi berubah ...
Salatiel

1
@ Salatiel Saya kira itu menduplikasi mereka ketika Anda sudah melacak file.
Iggy

36

Cara git mv di Mac Case-Sensitive

Hal ini terjadi karena Mac OS X mengimplementasikan fitur menjaga huruf besar kecil dan huruf besar-kecil yang dimaksudkan untuk membantu Anda.

Meskipun saran ganti nama ganda dalam jawaban lain akan berfungsi, saya merekomendasikan penggunaan '--force' untuk hasil praktik terbaik:

$ git mv --force somename SomeName


Catatan: jika Anda mencoba tanpa opsi paksa, git akan muntah pada Anda seperti ini:

$ git mv somename SomeName
$ fatal: destination exists, source=somename, destination=SomeName

Pada contoh di atas, perintah git gagal dan tidak ada file yang diubah di sistem file atau dalam indeks git.


Atas perintah pertama, saya mengerti fatal: not under version control.
2540625

Kesalahan fatal itu berarti Anda tidak memiliki repositori GIT di lokasi itu. gitperintah hanya berfungsi di direktori dengan repositori GIT.
David Manpearl

Tapi saya berada di subdirektori dari repositori Git saya ... Pada akhirnya, saya menyelesaikannya melalui jawaban Taran , BTW. Terima kasih.
2540625

19

Cobalah untuk mengubah opsi git config core.ignorecase menjadi false di file .gitconfig Anda.


4
atau tulisgit config core.ignorecase false
iforgotmypassword

2
@iforgotmypassword = Anda seharusnya menjawabnya - Saya akan memilih Anda sebenarnya
Abdeali Chandanwala

4

Langkah-langkah berikut membantu saya menyelesaikan masalah:

  1. Ubah nama folder menjadi temp:

    mv Folder temp                  // It will rename your Folder to temp
    
  2. Panggung dan komit:

    git add .
    git commit -m "Temp"
    
  3. Ganti nama tempfolder sesuai pilihan Anda:

    mv temp folder        // It will rename temp folder to the name of your choice(folder)
    git add .
    git commit -m "Folder Fixed"
    

Selesai - Sekarang Anda dapat mendorong.


1

Jika Anda melakukannya git mv AAA aaaatau git mv -f AAA aaa, itu tidak akan berhasil dan Anda akan memiliki kesalahan fatal: renaming 'AAA' failed: Invalid argument.

Karena AAAdan aaayang SATU SAMA folder / file di case-sensitive file sistem, langkah AAAuntuk aaasarana bergerak AAAsebagai aaa/AAA.

Jadi kamu harus lakukan

git mv AAA aaa.1
git mv aaa.1 aaa

Saya harap ini akan membantu Anda.


1

Alasannya adalah karena OS atau macOS berbasis LINUX mengabaikan sensitif huruf untuk nama file / folder. Kita perlu menyelesaikan masalah ini dengan langkah-langkah di bawah ini

For Exp, you want to change folder name from Base to base
1. mv Base base2
2. git add . && git commit -m "Fix folder name problem (wip)"
3. mv base2 base
4. git add . && git commit -m "Fixed folder name problem"

0

Tidak ada solusi yang berhasil untuk saya. SourceTree selalu membuat cabang saya dengan kasus yang berbeda dari yang saya inginkan. Jadi bagaimana saya menyelesaikannya adalah:

1 - Lihat file git Anda di finder. Anda dapat melakukannya dengan mengetik ini di terminal:

- `defaults write com.apple.finder AppleShowAllFiles TRUE`
- `killall Finder`

2 - Luncurkan kembali finder dan buka direktori proyek Anda

3 - Sekarang cukup ganti nama folder Anda, misalkan dari Fitur ke fitur. Dan begitulah.



0

Saya memiliki masalah yang sama dan menggunakan solusi di bawah ini. Saya menggunakan ini untuk batch, direktori & nama file dll:

git rm -r --cached .
git add --all .
git commit -a -m "Versioning updated directory/file names"
git push origin master

Seperti yang dijelaskan di sini.


0

Tidak ada yang benar-benar membantu saya, saya masih meminta git untuk menyembunyikan perubahan saya, karena situasi saya adalah folder lokal saya dikapitalisasi tetapi remote tidak, dan cabang saya ada di belakang dan saya tidak bisa lagi menarik karena perbedaan kapitalisasi file dalam struktur folder.

Satu-satunya cara saya bisa memperbaikinya adalah menghapus cabang lokal saya dan memeriksa remote.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.