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?

dan
sumber
1
kemungkinan duplikat Git: Mengubah kapitalisasi nama file
KyleMit
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
Paul R
sumber
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

Taran
sumber
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.

David Manpearl
sumber
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.

pooamlairaj
sumber
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.

Renil Babu
sumber
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.

Gapur Kassym
sumber
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"
giapnh
sumber
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.

Bruno Cunha
sumber
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.

Roger
sumber
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.

Snickers3192
sumber