Bir dizinin büyük harf kullanımını değiştiriyorum ve Git onu anlamıyor


142

Git sürüm kontrolü altında OS X Lion üzerinde bir proje geliştiriyorum. Bu küçük harfli dizinlere sahiptim ve daha sonra onları büyük harfle yazdım (örneğin, emailaddresses => EmailAddresses), ancak Git değişikliği tanımıyor gibi görünüyor. Hala çalıştırdığımda git ls-filesve diğer komutlarda dizinlerin küçük harfli olduğunu düşünüyor .

Bu zararsız mı, yoksa Git'in bu değişikliği alması için başka bir şey yapmalı mıyım?


1
Git'in

Bu benim için 2 gün kafa karışıklığı yarattı. Şimdi anladım. Bu soru için
Thnx

Yanıtlar:


201

Muhtemelen büyük / küçük harfe duyarlı olmayan (ancak büyük / küçük harfleri koruyan) HFS + kullanıyorsunuz. Genelde bunun etrafında şu şekilde çalışırım:

$ git mv somename tmpname
$ git mv tmpname SomeName

1
Bu benim sahip olduğum sorunun aynısı ve yaptığım şey bu.
fernferret

3
Windows için Github aracıyla aynı sorunu yaşadım. Yine yukarıdaki çözüm sorunun etrafında güzel bir şekilde çalışıyor: Windows Exploer'da geçici bir dosya olarak yeniden adlandırın, ardından - taahhüt ettikten sonra - doğru büyük / küçük harfle son adı yeniden adlandırın.
Jason

9
Veya tek bir komutla yapın: git mv --force somename SomeName ( stackoverflow.com/a/16071375/217866
adresinden

1
Değişikliklerin uzak depoya yansıtılması için de yapmanız gerekir git push origin master. Git uzaktan kumandayı güncellemeyi reddederse, sahte bir dosya (örneğin touch stam) eklemeniz ve itmeyi yapmanız gerekebilir . Ardından stam silinir ve tekrar itilir.
Rahav

2
Unutulmaması gereken bir şey, bunun çalışması için dosyanın bulunduğu klasörde olmanız gerektiğidir. İlk başta benim için açık değildi ve >>> kötü kaynak, kaynak = aynı isim, hedef = tmpname <<< almaya devam ettim çünkü komutu deponun kökünden çalıştırmaya çalışıyordum.
Parth Tamane

283

Git'e koşarak vakayı hesaba katmasını söyleyebilirsin

git config core.ignorecase false


4
Dosya adlarını git mv --force veya başka bir CL betiği kullanmadan değiştirdiyseniz gerçekten harika bir cevap. Teşekkür ederim!
MeanMatt

4
Bu mükemmel bir cevaptır, çünkü git mv'yi 200 dosyayı manuel olarak yeniden adlandırmak istemedim!
Adam Reis

1
Bunun en iyi yanıt olması gerektiği konusunda hemfikir. Teşekkür ederim.
HomerPlata

1
nedense tüm dosyaları kopyaladı, şimdi hem orijinal sürümler hem de büyük
harfli

1
@Salatiel Dosyayı zaten takip ederken onları kopyalıyor sanırım.
Iggy

37

Mac'te mv'ye Büyük Harfe Duyarlı olarak gitme

Bunun nedeni, Mac OS X'in size yardımcı olmayı amaçlayan büyük / küçük harf koruma ve büyük / küçük harf duyarlılığı özelliklerini kullanmasıdır.

Diğer cevaptaki çift yeniden adlandırma önerileri işe yarayacak olsa da, en iyi uygulama sonucu için '--force' kullanılmasını öneririm:

$ git mv --force somename SomeName


Not: Zorlama seçeneği olmadan denerseniz, git bu şekilde üzerinize kusacaktır:

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

Yukarıdaki örnekte, git komutu başarısız olur ve dosya sisteminde veya git dizininde hiçbir dosya değiştirilmez.


İlk emir üzerine anlıyorum fatal: not under version control.
2540625

Bu önemli hata, o konumda bir GIT deponuz olmadığı anlamına gelir. gitkomutlar yalnızca GIT depoları olan dizinlerde çalışır.
David Manpearl

Ama Git repomun bir alt dizinindeydim ... Sonunda Taran'ın cevabı BTW ile çözdüm. Teşekkürler.
2540625


4

Aşağıdaki adımlar sorunu çözmeme yardımcı oldu:

  1. Klasörü şu şekilde yeniden adlandırın temp:

    mv Folder temp                  // It will rename your Folder to temp
    
  2. Sahne ve taahhüt:

    git add .
    git commit -m "Temp"
    
  3. tempKlasörü tercihinize göre yeniden adlandırın :

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

Bitti - Artık itebilirsiniz.


1

Yaparsanız git mv AAA aaaveya yaparsanız git mv -f AAA aaaişe yaramaz ve hata alırsınız fatal: renaming 'AAA' failed: Invalid argument.

Çünkü AAAve aaaolan TEK AYNI klasör / küçük harfe duyarlı olmayan dosya sistemlerinde dosya, taşıma AAAiçin aaaaraçlar hareket AAAolarak aaa/AAA.

Yani yapmalısın

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

Umarım size yardımcı olur.


1

Bunun nedeni, LINUX tabanlı işletim sisteminin veya macOS'un dosya / klasör adı için büyük / küçük harfe duyarlılığı yok saymasıdır. Bu sorunu aşağıdaki adımlarla çözmemiz gerekiyor

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

Bu çözümlerin hiçbiri benim için işe yaramadı. SourceTree, şubemi her zaman istediğimden farklı bir vaka ile yaratıyordu. Öyleyse nasıl çözdüm:

1 - Bulucuda git dosyalarınıza bakın. Bunu terminalde yazarak yapabilirsiniz:

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

2 - Bulucuyu yeniden başlatın ve proje dizininize gidin

3 - Şimdi sadece klasör adınızı değiştirin, diyelim ki Özellikten özelliğe. Ve işte gidiyorsun.



0

Aynı sorunu yaşadım ve aşağıdaki çözümü kullandım. Bunu toplu iş, dizin ve dosya yeniden adları vb. İçin kullanıyorum:

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

Burada detaylandırıldığı gibi.


0

Bunların hiçbiri bana gerçekten yardımcı olmadı, hala git bana değişikliklerimi saklamamı söylüyordum, çünkü benim durumum, yerel klasörümün büyük harfle yazılmış olması, ancak uzaktan kumandanın olmamasıydı ve şubem geride kalmıştı ve artık dosya büyük harf farklılıkları nedeniyle çekemiyordum. klasör yapısında.

Bunu düzeltebilmemin tek yolu yerel şubemi silmek ve uzaktan kumandayı kontrol etmekti.

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.