2012-02-22 9 views
5

I file sono ospitati su una macchina Windows, e mi chiedevo se avrei usato la mia Linux box per gestire git, quindi ho montato la condivisione. E poi vedo che quando si fa lo stato git tutti i file vengono mostrati come modificati, e quando si tenta di spingere da questa condivisione non accetterà la mia chiave.Qualcuno può spiegare perché "git status" mostra i file come modificati quando si esegue sotto una condivisione su linux?

L'immagine proviene dalla stessa istantanea, stessa cartella allo stesso tempo.

Linux -------------------------------------------- ------------ winGitBash

enter image description here

+3

Che cosa ha fatto 'git diff' dicono la modifica era in quei file? –

risposta

5

This blog post lo spiega abbastanza bene. Fondamentalmente si tratta di una buona idea per impostare:

git config --global core.autocrlf vero

5

hai controllato le vostre impostazioni crlf sulle due macchine? Si può ricreare i file come CRLF (Windows) mentre l'altro ha solo terminazioni LF. Ciò sarebbe sufficiente per lo stato "modificato".

Non dimenticare le impostazioni personali e le impostazioni del repository.

1

Come git si comporta sulla nuova linea dipende da diverse configurazioni:

  • core.eol
  • core.autocrlf
  • .gitattributes file

Per te, sospetto che sotto possa esserci il motivo.

  • Nel proprio "database" (.git) git, tutti i file di testo sono memorizzati con newline LF.
  • Il repository locale è clonato in Windows, durante il checkout git converte LF in CRLF.
  • Quando si esegue git status sotto Linux/Cygwin, dal momento che il "git cygwin" pensa che sta lavorando sotto "* inux" environemnt, in modo che che git pensa repo locale si suppone che i file di testo checkout con LF. Quando in realtà trova CRLF, si pensa che CRLF sia stato modificato da LF, quindi i report di Git vengono modificati.

per verificare questo (non risolvere questo problema), si può fare:

# under linux 

# save your change 
git stash 

# delete working directory 
git rm --cached -r . 

# re-checkout 
git reset --hard 

ed eseguire git status di nuovo, voi/dovrebbe vedere i rapporti di uscita nessuna modifica.

Riferimenti:

Mind the end of your line

Problemi correlati