2012-03-29 12 views
57

Come si può racimolare fromotherposts, la normalizzazione di fine linea di Git ha i suoi pro e contro. Ho uno specifico progetto per Windows in cui penso che la cosa migliore da fare sia quella di disabilitare del tutto la normalizzazione del fine linea. Cioè, voglio lasciare intatte tutte le newline (la maggior parte delle quali sono CRLF), piuttosto che git normalizzarle su LF - solo dietro le quinte, e voglio che questa modifica abbia effetto su tutti i cloni del repository su tutte le macchine. La domanda è il modo più efficace per farlo.Come disabilitare Git end-of-line (da CRLF a LF) su tutti i cloni/macchine?

La maggior parte delle discussioni sulla normalizzazione end-of-line di Git sono in termini di core.autocrlf e ho potuto raggiungere il mio obiettivo impostando core.autocrlf=false. Tuttavia, questa è un'impostazione git-config e credo che si debba impostare separatamente su ogni macchina per macchina. Se è vero, sembra essere soggetto a errori, specialmente dal momento che il programma di installazione msysgit ne guida uno nell'impostazione core.autocrlf=true.

risposta

101

Il modo migliore per evitare di dover impostare core.autocrlf separatamente su ogni macchina sembra essere il controllo di un file .gitattributes nel repository che contiene la singola riga

* -text 

Oppure, se si dispone di una versione precedente di Git allora

* -crlf 

Questo dice Git che, per tutti i percorsi (quindi il *), end-of-line normalizzazione non deve essere tentata. Per quanto posso dire, questo non dovrebbe avere altri effetti collaterali. In particolare, non dovrebbe modificare il modo in cui vengono generate le differenze (questo ha attributo separato diff/-diff) o come vengono gestite le unioni (questo ha un attributo separato merge/-merge).

Per maggiori dettagli, vi suggerisco di queste risorse:

  1. La documentazione gitattributes (git help attributes o an online copy), che descrive in modo dettagliato come funziona la normalizzazione end-of-line e gli effetti particolari di diversi attributi. (Probabilmente più rilevanti sono text, crlf, diff, merge, e binary.)
  2. Git mailing list filo Is the "text" attribute meant only to specify end-of-line normalization behavior, or does it have broader implications? (Mar 30, 2012), che espande il significato di diversi attributi, e chiarisce che -text non significa semplicemente " questo è un file binario ".
+0

Il link nel post è morto. Forse potresti usare questo invece? http://git.661346.n2.nabble.com/Is-the-quot-text-quot-attribute-meant-only-to-specify-end-of-line-normalization-behavior-or-does-it- -td7420001.html – Antimony

Problemi correlati