2015-10-17 16 views
5

In particolare il file .DS_Store, sono su un mac, quindi ovviamente lo metto nel mio .gitignore. Non mi interessa affatto del file. Ma per qualche motivo sta cercando di estrarlo dal repository nudo che ho configurato come server.Come posso gestire questo errore Git?

Updating 8e11f79..b315527 
    error: Your local changes to the following files would be overwritten by merge: 
     .DS_Store 
     config/wi-fi.txt 
     web/.DS_Store 
    Please, commit your changes or stash them before you can merge. 
    Aborting 
+3

Inserire il file .DS_Store nel file gitignore non è sufficiente se è già in versione. – MrTux

+0

Sì, sarebbe l'opzione. E per wi-fi.txt devi risolvere il conflitto. – MrTux

risposta

3

Dal momento che hai avuto l'errore a causa di un tiro, il danno è già stato fatto: qualcuno ha già commesso un file .DS_Store-git. Questo non dovrebbe mai accadere, ovviamente, ma è successo.

Davvero non si desidera tali file essere sotto il controllo di versione, perché

  1. git sarà modificarli quando si estrae un commettere, o, peggio ancora, sarà attivamente unire le modifiche da qualcun altro in un locale .DS_Store quando si unisce un ramo creando eventualmente un file .DS_Store danneggiato. Non ho idea di cosa il tuo sistema operativo faccia con il contenuto di questi file, ma non si aspetta che tu li cambi in alcun modo.

  2. Si verificherà un errore ogni volta che si tenta di eseguire il checkout di una revisione contenente un file .DS_Store quando il sistema operativo lo ha modificato.

  3. Gli utenti non Apple non apprezzeranno i file .DS_Store che sporcano il repository.

vi consiglio di provare a dare la caccia l'origine del file, perché tali informazioni è fondamentale per come si può risolvere il problema. Il comando

git log --all -- .DS_Store 

fornisce un elenco di tutti i commit che hanno toccato il file .DS_Store. Questi sono i commit che è necessario riscrivere per rimuovere lo .DS_Store dalla cronologia.

Riscrivere i commit possono, naturalmente, essere fatto con la grande pistola git filter-branch, ma finché è solo commit recenti che non sono ancora stati uniti, è possibile ottenere via con fare un git rebase -i.

E, naturalmente, quando si è fatto, mettere .DS_Store nella vostra .gitignoree verificarlo nel. Questo dovrebbe impedire alle persone di aggiungere (accidentalmente) file .DS_Store in futuro.

Problemi correlati