Sementara saya menemukan pertanyaan serupa , saya tidak menemukan jawaban untuk masalah saya
Ketika saya mencoba untuk mengubah nama direktori dari FOO ke foo melalui git mv FOO foo
saya dapatkan
fatal: renaming 'FOO' failed: Invalid argument
BAIK. Jadi saya cobagit mv FOO foo2 && git mv foo2 foo
Tetapi ketika saya mencoba melakukan melalui git commit .
saya dapatkan
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)
Ketika saya menambahkan direktori melalui git add foo
perubahan tidak ada dan git commit .
memberi saya pesan yang sama lagi.
Apa yang saya lakukan salah? Saya pikir saya menggunakan sistem case-sensitive (OSX) mengapa saya tidak bisa mengubah nama direktori?
macos
git
version-control
case-sensitive
oschrenk
sumber
sumber
git mv
karya sederhana .git mv foo Foo
jika Anda menggunakan shell cygwin.Jawaban:
Anda berada dalam lingkungan yang tidak sensitif. Lebih jauh lagi, menambahkan tanpa
-A
itu tidak akan menangani sisi penghapusanmv
seperti yang dipahami Git. Peringatan! Pastikan tidak ada perubahan lain atau file yang tidak terlacak ada saat Anda melakukan ini atau mereka akan berkomitmen sebagai bagian dari perubahan ini!git stash -u
pertama, lakukan ini dan kemudiangit stash pop
setelah itu. Melanjutkan: Untuk menyiasati ini, lakukan hal berikut:Itulah cara yang diambil untuk mengubah direktori kerja, melakukan dan kemudian menciutkan 2 komitmen. Anda bisa memindahkan file dalam indeks, tetapi untuk seseorang yang baru git, mungkin tidak cukup eksplisit tentang apa yang terjadi. Versi yang lebih pendek adalah
Seperti yang disarankan dalam salah satu komentar, Anda juga dapat melakukan rebase interaktif (
git rebase -i HEAD~5
jika case yang salah diperkenalkan 5 komit yang lalu) untuk memperbaiki case di sana dan tidak ada case yang salah muncul di mana saja dalam sejarah sama sekali. Anda harus berhati-hati jika melakukan ini karena hash komit sejak saat itu akan berbeda dan yang lain harus rebase atau menggabungkan kembali pekerjaan mereka dengan masa lalu cabang.Ini terkait dengan mengoreksi nama file: Apakah git tidak case-sensitive?
sumber
git add foo2
.-A
mengurus keduanya. Begitu juga sebaliknya untuk langkah pertama. Saya akan menambahkan peringatan. Terima kasih!git rebase -i HEAD~2
. Catatan: Untuk menyederhanakan ini, atur pesan terakhir di komit pertama Anda dan perbaiki yang kedua.Anda ingin mengatur opsi
core.ignorecase
menjadi false, yang akan membuat Git memperhatikan kasus pada sistem file yang tidak mendukungnya. Untuk mengaktifkan di repo Anda:Kemudian Anda dapat mengganti nama file dengan
git mv
dan itu akan berfungsi seperti yang diharapkan.sumber
I modified a file that doesn't exist
.. hrmerror: The following untracked working tree files would be overwritten by checkout:
tapi ... file-file itu tidak ada.Saya dapat menyelesaikan ini, menggunakan git 1.7.7 dengan menggunakan nama file sementara:
sumber
(
git mv
varian -gratis)Saya mengalami masalah ini di Git pada Mac OS X 10.9. Saya menyelesaikannya sebagai berikut:
git rm -r --cached /path/to/directory
Itu tahapan direktori untuk dihapus di Git tetapi sebenarnya tidak menghapus file fisik (
--cached
). Ini juga membuat direktori, sekarang dengan case yang tepat, muncul di file yang tidak terlacak.Jadi Anda bisa melakukan ini:
Git kemudian akan mengenali bahwa Anda telah mengganti nama file, dan ketika Anda melakukannya,
git status
Anda akan melihat sejumlahrenamed:
baris. Periksa dan pastikan mereka terlihat benar, dan jika demikian, Anda dapat melakukan perubahan secara normal.sumber
mv
perintah itu tidak berfungsi untuk benar-benar mengganti nama direktori; Saya harus mengganti nama dalam Finder. Selain itu perbaikan ini berfungsi dengan baik.Ini adalah solusi cepat dan aman bug:
Peringatan! Selalu ganti nama semua file di folder yang diubah namanya (gunakan
/*
).Jangan ganti nama file tunggal. Ini mengarah ke bug, dijelaskan dalam jawaban ini .
Jika Anda ingin melihat hasilnya terlebih dahulu, gunakan
-n
:Setelah Anda membuat
mv
:Sekarang Git seharusnya mengganti nama folder BOTH dalam file internal dan sistem file.
sumber
Paksa dengan opsi -f:
sumber
false
, itu berhasil untuk sayaSaya punya satu masalah terkait.
Satu folder bernama 'Pro' (dibuat pertama) dan lainnya 'pro' (dibuat karena kesalahan). Di Mac, itu adalah hal yang sama, tetapi berbeda menurut git.
git config mengubah nama file ke folder kanan (terima kasih), dan juga membuat file ghost di 'pro' (Tidak !!). Saya tidak bisa menambahkan perubahan file ghost ke trek dan saya tidak bisa checkout cabang lain kecuali membawa file-file itu dengan saya, dan saya juga tidak bisa mengatur ulang entah bagaimana.
Alih-alih itu, saya melakukannya
Untuk membuatnya lebih aman, saya melakukannya di cabang perbaikan yang terpisah, dan kemudian saya bergabung kembali ke cabang utama
Untuk masalah file hantu yang dibuat oleh, dapatkah guru menjelaskan Bagaimana dan Mengapa? Terima kasih sebelumnya.
sumber
Anda tidak menggunakan sistem file case-sensitive dalam OS X kecuali Anda memilihnya secara eksplisit. HFS + bisa case-sensitive, tetapi standarnya adalah case-sensitive.
sumber
Inilah solusi yang sangat sederhana di sekitar semua gitfoo di halaman ini.
sumber
Meningkatkan jawaban Adam Dymitruk (konyol bahwa SO tidak membiarkan saya mengomentari jawabannya), dengan menggunakan "git mv" akan secara otomatis menampilkan persis file yang dipindahkan. Tidak diperlukan simpanan dan "git add -A" yang berisiko dapat dihindari:
sumber
Ini bekerja baik untuk saya di Windows. PowerShell bekas dengan yang berikut ini:
mv .\Folder-With-Wrong-Casing .\temp
git add -A
git commit -m "renamed folder with wrong casing to temp"
mv .\temp .\Folder-with-Correct-Casing
git add -A
git commit --amend -m "Renamed to proper casing"
git push
Berkat jawaban Adam di atas.
sumber