2012-11-02 22 views
8

, görüyorum:Sayı =

# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: DIR/a 
# 

Ancak, benim çalışma dizininde ben küçük harf notu (bu dosya aslında dir/a denir görüyoruz DIR yerine dir).

Soru: Bu evreleme alana a dosyayı modifiye ve taahhüt eklemek istediğiniz, ama (dir/a gösteren) benim çalışma dizininde olduğu gibi olmasını istiyorum - yönlü Git aksine edilir onu DIR/a olarak görmek. Bunu nasıl yapabilirim?

Önemli Not:

Ne yazık ki, sadece git mv DIR/a dir/aDIR/a çünkü aslında çalışma ağacında yok olamaz.

Şu anda benim .git/config dosyam ingorecase = true gösteriyor, bu yüzden ben bu false eşit ayarlamak zorunda biliyorum. Ancak, bu bayrak hiçbir şey yapmadan ama değiştirdikten sonra, bu bir git status şimdi ortaya koymaktadır:

# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: DIR/a 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# dir/ 

bu Git beri sadece içeriğini izleyen beklenen ve IGNORECASE anahtarlama git yeni bir dosya eklendi düşünmek yapacak. Ne yazık ki, git şimdi değiştirilmiş iki dosyam olduğunu düşündüğümde, aslında sadece bir tane var. Ben sadeceyerine, dir/a (benim çalışma dizinimdeki gibi) göstermek için, yakın zamanda yapılmış olan aynı a farkları ile istiyorum. Eğer böyle bir tehlikeli durum ilk etapta ortaya çıkan merak olarak nasıl iseniz

Ek Not

, ben aslen DIR benim dizinin davayı yeniden adlandırma zaman yapmıştı saçma hataları çoğaltmak başarmış dir. Bunun, bu sorun için bir çözüm bulmaya yardımcı olacağını düşünüyorsanız, yanlışlıkla nasıl bu kadar karıştıracağımı açığa çıkaracak bir düzenleme yapmaktan mutluluk duyarım. (git mv yerine mv ve ignorecase bayrağının habersiz olmasından ve ignorecase=true olarak bırakılmasından dolayı).

+0

YOK WAY! Bu aynı sorunu yaşıyorum. – dinkelk

cevap

16

Bir geçici çözüm buldum. Daha zarif bir çözüm olup olmadığından emin değilim, ama bunu test ettim ve işe yarıyor. Git, yalnızca biri olduğunda iki dosyanın var olduğunu düşünmeye devam ettiğinden, yalnızca dizini tamamen kopyalamak zorunda kaldı, git'i bir dosya olarak izlemeyi kaldır ve sonra kopyalanan dizini orijinaline geri al.

(1) taahhütlü olmak için dir numaralı dosyalara herhangi bir işlem yapın.

(2) cp -r dir tempDir

(3) git add tempDir/

(4) git rm -r dir Dir

(5) git commit -m "Temporary rename of dir to tempDir"

(6) git mv tempDir mms

(7) git commit -m "Full rename from DIR to dir complete"

+0

Bu işe yarıyor, ancak daha basit veya daha temiz bir çözümden haberi olması durumunda, bir süre cevap olarak seçeceğim. – smaccoun

19

Örnek: Eğer daha az kasalıysanız, Myaks

git mv src/Mydir src/mydirs 

git mv src/mydirs src/mydir 

git commit -m "Rename folder Mydir to mydir" 
+0

Kesinlikle daha şık bir çözüm –

+0

Basit ve hızlı, Bu çözümü beğendiniz! – NBoymanns

+1

Bu kabul edilen cevap olmalı. Teşekkürler Ed! – NikosKeyz