Git, büyük / küçük harfe duyarlı değil mi?


98

Kısmi çağrımın ilk taahhüdünde _Electronicsbüyük harflerle yazılmıştı, sonra olarak değiştirdim _electronics.

Cygwin altında Git yeni adı aldıktan sonra davayı görmezden geldi, ben de hedef depoda adı elle değiştirdim.

Şimdi bazen taahhüt edilen _electronicskısmı olarak değiştirir _Electronics.

Neyi yanlış yaptım?


9
Hangi işletim sistemindesiniz?
Keith Thompson

10
Hangi dosya sistemini kullanıyorsunuz?
Andrew Marshall

Cygwin ile Windows. Sunucum Ubuntu Linux kullanıyor. Dosya sistemini bilmiyorum, sanırım ext3 veya ext2 - sağlayıcım minimum kurulumu yapılandırdı.
JAkk

Windows'un büyük / küçük harfe duyarlı olmamasına sevindiniz mi?
Cascabel

4
Windows büyük / küçük harfe duyarlı değildir, ancak bazen (bugün daha sık) büyük / küçük harf korumalıdır .
Arafangion

Yanıtlar:


74

2 farklı şey olarak görülecektir ancak büyük / küçük harfe duyarlı olmayan bir sistemde sorunlara neden olacaktır. Durum böyleyse, tüm yolları veya dosya adlarını sekmeyle tamamladığınızdan emin olun. Ayrıca, sadece bir durumda bir şeyin adını değiştirmek için şunu yapın:

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

Bu, onları işleyerek ve ardından taahhütleri çökerterek değişiklikler yapmanın açık bir yoludur. Bunu yapmanın daha kısa bir yolu, dizini ve çalışma klasörünü bir arada işlemektir:

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

Bu aynı zamanda dizin adlarının ayarlanmasıyla da ilgilidir: git mv ve yalnızca dizinin durumunu değiştirin


bunun doğru olduğu görülüyor (büyük harflerden küçük harfe geçmem dışında)
JAkk


Sadece yapabilirsin git mv file.txt File.txt. Bunun yeni bir git özelliği olup olmadığından emin değilim.
Phil

108

Büyük / core.ignorecaseküçük harfe duyarlı dosya sistemlerinde false ve Windows'ta msysgit'te true olarak ayarlanan yapılandırma değerine bağlı olacaktır .

core.ignorecase

Doğruysa, bu seçenek git'in FAT gibi büyük / küçük harfe duyarlı olmayan dosya sistemlerinde daha iyi çalışmasını sağlamak için çeşitli geçici çözümlere olanak tanır. Örneğin, bir dizin listesi, git "Makefile" i beklediğinde "makefile" bulursa, git bunun gerçekten aynı dosya olduğunu varsayar ve onu "Makefile" olarak hatırlamaya devam eder.

Git-clone (1) veya git-init (1), depo oluşturulduğunda uygunsa, core.ignorecase'i araştırır ve doğru olarak ayarlar.

Git'te dosya adlarının büyük harf kullanımını değiştirme konusuna verilen bu yanıtta daha fazla ayrıntı .


80
Bu doğru cevap imo. Gelecekte benim git config --unset-all core.ignorecase && git config --system core.ignorecase falseiçin sudo ile kullanın .
Znarkus

2
James'e aynen, @Znarkus OS X'te bu sorunun düzeltmesini belirledi, Teşekkürler!
Craig Nakamoto

1
@Znarkus Windows üzerinde de çalışıyor. Güzel.
orlade

9
@Znarkus, OSX'te bunu yapmanın sorunu, bulucu aracılığıyla bir dosyayı yeniden adlandırdığınızda ve yalnızca durumu değiştirdiğinizde git'in yeniden adlandırılmış sürümü tamamen yeni bir dosya olarak görmesi, ancak buna karşılık gelen bir "silme" oluşturmamasıdır. dosyanın eski sürümü için eylem. Dolayısıyla, github'a bağlanır ve push ederseniz, github hem eski hem de yeni adlandırılmış dosyaya sahip olacak, ancak yerel sisteminiz yeni dosyaya sahip olacak ve git daha akıllıca olmayacak.
ivanreese

2
@spiralganglion OSX üzerindeki web devi için , büyük / küçük harfe duyarlı bir bölüm oluşturmanızı ve ardından onu www dizininiz olarak bağlamanızı gerçekten tavsiye edebilirim .
Znarkus

23

Bu çok daha kolay:

git mv Electronics electronics -f
git commit -m "That was easy!"

1
Bunu büyük / küçük harfe duyarlı olmayan bir dosya sisteminde denediniz mi?
Edward Thomson

1
Başlangıçta bunu bir dosyanın değil, bir klasörün büyük / küçük harf değiştirerek yeniden adlandırmaya çalışan orijinal poster olarak okudum. Şimdi bunu tekrar okuduğuma göre, belirsiz. Nitekim mv -fbir dosya için çalışacaktır.
Edward Thomson

22
git config --system core.ignorecase false

0

Senaryomda iki klasörüm vardı testsve Testsbunlar Github'da iki ayrı klasör olarak, ancak TestsWindows'ta tek bir klasör olarak görünüyordu. Amacım ikisini de birleştirmekti tests.

Aşağıdaki yaklaşımı kullandım:

  1. Yeni bir klasör oluştur temp
  2. Tüm içeriği kopyalama Testsiçintemp
  3. Sil Tests
  4. yürütmek git rm Tests -r
  5. yeniden adlandırma tempiçintests

0

Sorunu çözmeye çalıştım ve Windows10'da başarılı oldu

Diyelim ki bitbucket TEST ve test üzerinde iki klasör var ama diskte repo klonladığımda sadece TEST oluşturuyor ve testi tüm dosyaları içeren git üzerinde tek klasör olarak tutmak istiyorum.

Git mv TEST test1 -f git mv text1 test -f git commit -m "yeniden adlandırma ..." komut satırında aşağıdaki komutları çalıştırmam gerekecek git push

Şimdi, klasör hiyerarşisinin bitbucket üzerinde düzeltildiğini göreceksiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.