Ho letto molte domande e risposte diverse su Stack Overflow e documentazione git su come funziona l' impostazione core.autocrlf .
Questa è la mia comprensione da ciò che ho letto:
I client Unix e Mac OSX (pre-OSX utilizzano CR) utilizzano i finali di linea LF.
I client Windows utilizzano i finali di linea CRLF.
Quando core.autocrlf è impostato su true sul client, il repository git archivia sempre i file nel formato di fine riga LF e le terminazioni di riga nei file sul client vengono convertite avanti e indietro al check out / commit per i client (ovvero Windows) che usano non -LF finali di linea, indipendentemente dal formato in cui si trovano i file dei finali di linea sul client (questo non è d'accordo con la definizione di Tim Clem - vedi aggiornamento sotto).
Ecco una matrice che tenta di documentare lo stesso per le impostazioni 'input' e 'false' di core.autocrlf con punti interrogativi in cui non sono sicuro del comportamento di conversione di fine riga.
Le mie domande sono:
- Quali dovrebbero essere i punti interrogativi?
- Questa matrice è corretta per i "punti non di domanda"?
Aggiornerò i punti interrogativi dalle risposte man mano che il consenso sembra formarsi.
valore core.autocrlf vero input false -------------------------------------------------- -------- commettere | convertire? ? nuovo | in LF (convertire in LF?) (nessuna conversione?) commettere | convertire in ? no esistente | Conversione LF (convertire in LF?) checkout | convertire in ? no esistente | Conversione CRLF (nessuna conversione?)
Non sto davvero cercando opinioni su pro e contro delle varie impostazioni. Sto solo cercando dati che chiariscano come aspettarsi che git funzioni con ciascuna delle tre impostazioni.
-
Aggiornamento del 17/04/2012 : dopo aver letto l'articolo di Tim Clem collegato da JJD nei commenti, ho modificato alcuni dei valori nei valori "sconosciuti" nella tabella sopra, oltre a cambiare "checkout esistente | vero per convertire in CRLF anziché convertirlo in client ". Ecco le definizioni che fornisce, che sono più chiare di qualsiasi cosa abbia visto altrove:
core.autocrlf = false
Questo è il valore predefinito, ma la maggior parte delle persone è incoraggiata a cambiarlo immediatamente. Il risultato dell'uso di falso è che Git non fa mai casino con le terminazioni di riga nel tuo file. Puoi archiviare i file con LF o CRLF o CR o un mix casuale di questi tre e Git non se ne cura. Ciò può rendere le differenze più difficili da leggere e le fusioni più difficili. La maggior parte delle persone che lavorano in un mondo Unix / Linux usano questo valore perché non hanno problemi CRLF e non hanno bisogno che Git faccia un lavoro extra ogni volta che i file vengono scritti nel database degli oggetti o scritti nella directory di lavoro.
core.autocrlf = true
Ciò significa che Git elaborerà tutti i file di testo e si assicurerà che CRLF venga sostituito con LF durante la scrittura di quel file nel database degli oggetti e trasformerà nuovamente tutti gli LF in CRLF durante la scrittura nella directory di lavoro. Questa è l'impostazione consigliata su Windows perché garantisce che il repository possa essere utilizzato su altre piattaforme mantenendo CRLF nella directory di lavoro.
core.autocrlf = input
Ciò significa che Git elaborerà tutti i file di testo e si assicurerà che CRLF venga sostituito con LF durante la scrittura di quel file nel database degli oggetti. Tuttavia, non farà il contrario. Quando si leggono i file di nuovo dal database degli oggetti e li si scrive nella directory di lavoro, avranno ancora LF per indicare la fine della riga. Questa impostazione viene generalmente utilizzata su Unix / Linux / OS X per impedire che i CRLF vengano scritti nel repository. L'idea è che se hai incollato il codice da un browser web e hai accidentalmente inserito i CRLF in uno dei tuoi file, Git si sarebbe assicurato che fossero sostituiti con gli LF quando scrivevi nel database degli oggetti.
L'articolo di Tim è eccellente, l'unica cosa che riesco a pensare è che manchi che il repository sia in formato LF, il che non è necessariamente vero, specialmente per i progetti solo per Windows.
Il confronto tra l'articolo di Tim e la risposta più votata fino ad oggi da jmlane mostra un perfetto accordo sulle impostazioni true e input e disaccordo su false setting.
autocrlf
false sembra molto più facile;) stackoverflow.com/questions/2333424/...