2013-03-18 9 views
10

Sto lavorando con git su windows e ho un file nel mio repository, diciamo "foo.txt". Oggi ho voluto rinominare questo file in "Foo.txt" (maiuscolo). Come suggerito in this SO question, ho usato git mv -f foo.txt Foo.txt, che ha prodotto il risultato desiderato. Ho proceduto a commit la modifica al mio repo.
MODIFICA: Mi piacerebbe che questo fosse un cambiamento permanente, ed essere ancora in grado di eseguire il checkout che precede questo cambiamento.Git su windows: impossibile cambiare ramo dopo aver rinominato un file (solo maiuscole/minuscole)

Tuttavia, dopo che ho incontrato un errore sul tentativo di cambiare ramo:

# I'm on branch1 
git checkout branch2 
Aborting 
error: The following untracked working tree files would be overwritten by checkout: 
Foo.txt 
Please move or remove them before you can switch branches. 

Dopo qualche rovistando ho scoperto che il mio file .git/config ha avuto la seguente impostazione:

[core] 
    ignorecase=false 

La modifica di questa a true sembra risolvere il problema e mi permette di cambiare tra i rami normalmente.

Quindi per quanto riguarda questo, vorrei sapere:

  1. C'è qualche effetto negativo di questa impostazione? Dovrebbe essere sempre vero su Windows? Cosa succede se sto lavorando con altri sviluppatori e non hanno lo stesso valore impostato per questo?
  2. C'è un altro modo per rinominare il file senza dover modificare questa impostazione?
  3. Perché questo accade in primo luogo? Quando ho eseguito il commit della modifica, git ha identificato correttamente che il file è stato effettivamente rinominato (non ha eliminato un file e quindi ne ha aggiunto un altro). Quindi cosa è successo esattamente quando ho provato a cambiare ramo?

Grazie!

risposta

1

Un modo semplice (ma inelegante) per risolvere questo problema senza dover modificare l'impostazione di configurazione è eliminare il file e verificarlo di nuovo. Nel mio caso questo ha permesso alle mie modifiche di ramificarsi come di nuovo normale.

Modifica: come ha sottolineato Avivr, la soluzione proposta non risolve il problema in modo permanente. Non eliminerò ancora questa risposta perché potrebbe essere utile come soluzione temporanea temporanea in alcuni casi.

+0

Ciò significherebbe che avrei eliminato il file ogni volta che voglio cambiare ramo, da ora fino all'infinito. Destra? Sembra un po 'scomodo ... – avivr

+0

Hai provato davvero? Nel mio caso ha funzionato, ma non pretenderò di poter riprodurre completamente la tua situazione – bigge

+0

Sì, l'ho fatto, almeno supponendo di aver capito bene. Ho rinominato il file con git, quindi ho eseguito il commit della modifica. Poi ho cancellato il file (solo con 'rm') e ho usato' git checkout .' per ripristinarlo. Dopo, lo stesso errore quando si cambia ramo. – avivr

2

Come indicato in "Unresolvable Git error: The following untracked working tree files would be overwritten by checkout", l'impostazione di core.ignorecase a true è un modo valido per consentire il checkout di procedere.

Ma io preferirei, come in "GIT: The following untracked working tree files would be overwritten by checkout", a:

  • git add quello che ho appena modificato (nel tuo caso, git mv potrebbe avere già aggiunto il file rinominato all'indice)
  • git stash, salvare l'indice
  • git checkout -b anotherBranch: questo dovrebbe funzionare in quanto l'indice è pulito
  • git stash pop, se si desidera ripristinare il cambiamento caso su quel nuovo indice.
+0

Ok, ma voglio rinominare. Il problema è che se lo faccio, non posso cambiare ramo dopo. – avivr

+0

@avivr non puoi cambiare dopo il commit, anche con 'core.ignore' impostato su' false'? – VonC

+0

No, come ho detto, posso cambiare ramo solo se è impostato su true. Inoltre, dopo aver nascosto il nome come hai suggerito, ho ottenuto lo stesso errore quando provavo a far scoppiare lo stash. Quindi lo stash era "inappollabile" e dovevo lasciarlo cadere. – avivr

Problemi correlati