2012-11-02 4 views
8

Quando digito git status, vedo:Problema con la ridenominazione di una directory in git in minuscolo mentre ignoreLowercase = True

# 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 
# 

Tuttavia, nella mia directory di lavoro vedo che questo file è effettivamente chiamato dir/a (notare il minuscolo dir anziché DIR).

Domanda: voglio aggiungere questo modificato a file per l'area di sosta e si impegnano, ma voglio che sia come è nella mia directory di lavoro (che mostra dir/a) - in contrasto con il modo in cui Git è vedendolo come DIR/a. Come posso fare questo?

Nota importante:

Purtroppo, non posso semplicemente perché git mv DIR/a dir/aDIR/a in realtà non esiste nella struttura di lavoro.

Attualmente il mio file .git/config mostra ingorecase = true, quindi so che devo impostarlo uguale a false. Tuttavia, dopo aver fatto nulla, ma cambiare questo flag, un git status di questo rivela ora:

# 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/ 

Mi aspettavo questo dato git tiene traccia solo il contenuto, e il passaggio ignorecase renderebbe git pensare è stato aggiunto un nuovo file. Sfortunatamente, git ora pensa che io abbia due file che vengono modificati, quando in realtà ne ho uno solo. Voglio git status semplicemente mostrare dir/a (come è nella mia directory di lavoro) anziché DIR/a, con le stesse differenze di a che avevo appena creato.

la nota

Se sei curioso di sapere come una situazione così precaria nata in primo luogo, sono riuscito a replicare gli errori stupidi che avevo fatto quando si rinomina in origine il caso del mio directory da DIR a dir. Se pensi che questo possa essere d'aiuto per arrivare a una soluzione per questo problema, sarei felice di fare una modifica che rivelasse come ho erroneamente reso git così confuso. (mi coinvolge colpendo accidentalmente mv anziché git mv e ignorando il flag ignorecase e lasciandolo come ignorecase=true).

+0

NO WAY! Ho avuto questo stesso identico problema. – dinkelk

risposta

16

Ho trovato una soluzione alternativa. Non sono sicuro che esista una soluzione più elegante, ma l'ho testata e funziona. Poiché git continua a pensare che esistano due file solo quando uno lo fa, in realtà ho dovuto semplicemente copiare completamente la directory, rimuovere quello che git sta inseguendo come un file, e quindi ripristinare la directory copiata nell'originale.

(1) esegue il commit di tutti i file in dir che devono essere impegnati.

(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

Questo funziona, ma rimarrò a selezionarlo come una risposta per un po 'di tempo nel caso qualcuno sappia di una soluzione più semplice o più pulita. – smaccoun

19

Esempio: se hai la carcassa inferiore Mydir

git mv src/Mydir src/mydirs 

git mv src/mydirs src/mydir 

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

Sicuramente una soluzione più elegante –

+0

Semplice e veloce, come questa soluzione! – NBoymanns

+1

Questa dovrebbe essere la risposta accettata. Grazie Ed! – NikosKeyz

Problemi correlati