Principalmente .gitattributes
file ha * text=auto
. Qual è lo scopo di text=auto
in quel file?
Principalmente .gitattributes
file ha * text=auto
. Qual è lo scopo di text=auto
in quel file?
Risposte:
Dai documenti :
Ogni riga nel
.gitattributes
(o.git/info/attributes
) file ha la forma:pattern attr1 attr2 ...
Quindi qui, il modello è *
, che significa tutti i file e l'attributo è text=auto
.
Cosa fa text=auto
? Dalla documentazione:
Quando il testo è impostato su "auto", il percorso è contrassegnato per la normalizzazione automatica di fine riga. Se Git decide che il contenuto è testo, le sue terminazioni di riga vengono normalizzate in LF al momento del check-in.
Qual è il comportamento predefinito se non è abilitato?
imprecisato
Se l'attributo text non è specificato, Git utilizza la variabile di configurazione core.autocrlf per determinare se il file deve essere convertito.
Cosa fa core.autocrlf
? Dai documenti:
core.autocrlf
L'impostazione di questa variabile su "true" è quasi uguale all'impostazione dell'attributo di testo su "auto" su tutti i file, tranne per il fatto che i file di testo non sono garantiti per essere normalizzati: i file che contengono CRLF nel repository non verranno toccati. Utilizzare questa impostazione se si desidera avere terminazioni di linea CRLF nella directory di lavoro anche se il repository non ha terminazioni di linea normalizzate. Questa variabile può essere impostata su input, nel qual caso non viene eseguita alcuna conversione di output.
Se pensi che sia tutto chiaro come il fango, non sei solo.
Ecco cosa * text=auto
fa nelle mie parole: quando qualcuno commette un file, Git indovina se quel file è un file di testo o meno, e se lo è, commetterà una versione del file in cui tutti i byte CR + LF vengono sostituiti con byte LF. Non influisce direttamente sull'aspetto dei file nell'albero di lavoro, esistono altre impostazioni che convertiranno i byte LF in byte CR + LF durante il checkout di un file.
Vorrei non raccomandare mettere * text=auto
nel .gitattributes
file. Invece, consiglierei qualcosa del genere:
*.txt text
*.html text
*.css text
*.js text
Questo indica esplicitamente quali file sono file di testo, che ottengono CRLF convertiti in LF nel database degli oggetti (ma non necessariamente nell'albero di lavoro). Avevamo un repository * text=auto
e Git aveva indovinato erroneamente che un file di immagine era un file di testo, causando il danneggiamento di esso poiché sostituiva i byte CR + LF con byte LF nel database degli oggetti. Non è stato divertente debug.
Se è necessario utilizzarlo * text=auto
, inserirlo come prima riga .gitattributes
, in modo che le righe successive possano sovrascriverlo. Questo sembra diventare una pratica sempre più popolare.
everyone
riferisci git-scm
, è probabilmente perché stanno sviluppando un pacchetto * nix e quindi l'utilizzo del carattere di nuova riga * nix è normale .
git-scm
provenienti da * nix. MacOS utilizza LF. Solo Windows (considerando solo i SO del flusso principale) utilizza CRLF. Questo rende più difficile per gli sviluppatori che utilizzano gli strumenti * nix su Windows e per tutti durante lo scambio di file. Vedi anche Perché CRLF .
*.txt text=auto
e per *.txt text
favore? Ho pensato che tutte e 4 le righe del tuo esempio sopra avrebbero dovuto essere text=auto
, non solo text
dopo l'estensione del file. I file di footprint di KiCad, ad esempio (estensione ".kicad_mod"), vengono normalizzati usando questa riga nel loro file gitattributes: *.kicad_mod text=auto
( kicad-pcb.org/libraries/klc/G1.7 ).
Assicura che le terminazioni di linea siano normalizzate. Fonte: Kernel.org
Quando il testo è impostato su "auto", il percorso è contrassegnato per la normalizzazione automatica di fine riga. Se git decide che il contenuto è testo, le sue terminazioni di riga vengono normalizzate in LF al momento del check-in.
Se si desidera interagire con un sistema di gestione del codice sorgente che impone la normalizzazione di fine riga o si desidera semplicemente normalizzare tutti i file di testo nel proprio repository, è necessario invece impostare l'attributo di testo su "auto" per tutti i file.
Questo assicura che tutti i file che Git considera essere di testo avranno terminazioni di linea normalizzate (LF) nel repository.
When a text file is normalized, its line endings are converted to LF in the repository.
LF
, anche su Windows?
Tale configurazione riguarda la gestione delle terminazioni di riga. Se abilitato, tutti i finali di riga vengono convertiti in LF nel repository. Esistono altri flag per gestire il modo in cui le terminazioni di riga vengono convertite nella directory di lavoro. Informazioni complete sulla questione qui: https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html