Come modificare le impostazioni di fine riga


582

Esiste un file o un menu che mi consente di modificare le impostazioni su come gestire i finali di linea?

Ho letto che ci sono 3 opzioni:

  1. Acquista in stile Windows, esegui il commit in stile Unix

    Git convertirà LF in CRLF durante il check out dei file di testo. Quando si esegue il commit di file di testo, CRLF verrà convertito in LF. Per i progetti multipiattaforma, questa è l'impostazione consigliata su Windows ("core.autocrlf" è impostato su "true")

  2. Acquista così com'è, esegui il commit in stile Unix

    Git non eseguirà alcuna conversione durante il check out dei file di testo. Quando si esegue il commit di file di testo, CRLF verrà convertito in LF. Per i progetti multipiattaforma questa è l'impostazione consigliata su Unix ("core.autocrlf" è impostato su "input").

  3. Acquista così com'è, esegui il commit così com'è

    Git non eseguirà alcuna conversione durante il check out o il commit di file di testo. La scelta di questa opzione non è consigliata per progetti multipiattaforma ("core.autocrlf" è impostato su "false")



3
Quale di questi è l'impostazione predefinita?
Stephen,

2
Non importa, sembra che il valore predefinito sia vero, che penso sia appropriato.
Stephen,

19
In realtà trovo che la terza opzione funzioni meglio. Altrimenti mi sono spesso trovato in situazioni in cui ho modificato sia script batch che sh sulla stessa piattaforma (Windows / Linux) e poi li ho commessi e Git "corregge" automaticamente le terminazioni di riga per una piattaforma ... No, preferisco essere auto- consapevole delle terminazioni di riga e eseguirne il commit / checkout esattamente come sono.
JustAMartin,

1
@Neutrino Vorrei che questo fosse vero, ma un esempio di IDE che fa casini con le terminazioni di linea (e non offre un'opzione di configurazione ragionevole per disattivarlo) è Visual Studio.
Cássio Renan,

Risposte:


530

Il modo normale per controllare questo è con git config

Per esempio

git config --global core.autocrlf true

Per i dettagli, scorri verso il basso in questo link fino a Pro Git fino alla sezione denominata "core.autocrlf"


Se vuoi sapere in quale file è salvato, puoi eseguire il comando:

git config --global --edit

e il file di configurazione globale di git dovrebbe aprirsi in un editor di testo e puoi vedere da dove è stato caricato quel file.


17
trueo falsesono solo due opzioni, il programma di installazione ha tre
qwertymk

49
inputè la terza opzione (come indicato nel link che ho fornito). Le 3 opzioni sono true| false| input
CodingWithSpike

2
Ecco un'altra domanda buona SO sul tema: stackoverflow.com/questions/3206843/...
CodingWithSpike

31
In realtà, se rileggi la tua domanda, negli estratti copiati / incollati: in "1 ... ("core.autocrlf" is set to "true") ... 2 ... ("core.autocrlf" is set to "input") ... 3 ... ("core.autocrlf" is set to "false")"pratica hai risposto alla tua domanda? :)
CodingWithSpike

2
Questo è il vecchio modo di aggirarlo. Guarda il file .gitattributes.
eftshift0

176

Formato di fine riga utilizzato nel sistema operativo

  • Windows: coppia CR(ritorno a capo ) \re LF(LineFeed \n)
  • OSX, Linux: LF(LineFeed \n)

Possiamo configurare git per correggere automaticamente i formati di fine linea per ciascun sistema operativo in due modi.

  1. Configurazione Git Global
  2. Usa il .gitattributesfile

Configurazione globale

In Linux / OSX
git config --global core.autocrlf input

Questo risolverà qualsiasi CRLFa LFquando commetti.

In Windows
git config --global core.autocrlf true

Questo assicurerà che al momento del checkout in Windows, tutto LFverrà convertito inCRLF

.gitattributes File

È una buona idea conservare un .gitattributesfile perché non ci aspettiamo che tutti i membri del nostro team configurino la propria configurazione. Questo file dovrebbe rimanere nel percorso root del repository e se esiste, git lo rispetterà.

* text=auto

In questo modo tutti i file verranno trattati come file di testo e convertiti nella riga del sistema operativo che termina al checkout e torna LFautomaticamente al commit. Se vuoi dirlo esplicitamente, usa

* text eol=crlf
* text eol=lf

Il primo è per il checkout e il secondo è per il commit.

*.jpg binary

Tratta tutte le .jpgimmagini come file binari, indipendentemente dal percorso. Quindi nessuna conversione necessaria.

Oppure puoi aggiungere qualificatori di percorso:

my_path/**/*.jpg binary

3
Che dire di OS X, che utilizza da solo CR(ritorno a capo)?
jww

23
MacOS legacy (ovvero MacOS 9 e precedenti) usato CRda solo, ma OS X generalmente lo usa LF.
Zachary Ware,

2
Posso usarlo * text eol=lfdue volte per fare il checkout con LFsu Windows?
mbomb007,

1
Secondo l' impostazione della documentazione di gitattributes , * text=autogit può decidere se il contenuto è di testo o meno. Forzare tutti i file come testo dovrebbe essere * textsolo.
Adrian W,

Come faccio a impostare i eol=crfile su Mac OS 9 e altre piattaforme legacy?
NobleUplift,

36

Per una soluzione di impostazione del repository, che può essere ridistribuita a tutti gli sviluppatori, controlla l' attributo text nel file .gitattributes . In questo modo, gli sviluppatori non devono impostare manualmente le proprie terminazioni di linea sul repository e poiché diversi repository possono avere stili di fine riga diversi, core.autocrlf globale non è il migliore, almeno secondo me.

Ad esempio, deselezionando questo attributo su un determinato percorso [ . - testo] costringerà git a non toccare le terminazioni di linea durante il check-in e il check-out. A mio avviso, questo è il comportamento migliore, poiché la maggior parte dei moderni editor di testo può gestire entrambi i tipi di terminazioni di riga. Inoltre, se come sviluppatore desideri ancora eseguire la conversione di fine riga al momento del check-in, puoi comunque impostare il percorso in modo che corrisponda a determinati file o impostare l'attributo eol (in .gitattributes) sul tuo repository.

Dai un'occhiata anche a questo post correlato, che descrive in modo più dettagliato l'attributo .gitattributes di file e testo: qual è la migliore strategia di gestione CRLF (ritorno a capo , avanzamento riga) con Git?


. - textdà per is not a valid attribute name: .gitattributes:1favore metticat .gitattributes
jangorecki

3

Per me quello che ha fatto il trucco è stato eseguire il comando

git config auto.crlf false

all'interno della cartella del progetto, lo volevo specificamente per un progetto.

Quel comando ha cambiato il file nel percorso {project_name} /. Git / config (fyi .git è una cartella nascosta) aggiungendo le righe

[auto]
    crlf = false

alla fine del file. Suppongo che cambiare il file faccia lo stesso trucco.


1

Se si desidera riconvertire i formati di file che sono stati modificati in formato UNIX dal formato PC.

(1) È necessario reinstallare GIT di tartaruga e nella sezione "Conversione di fine linea" assicurarsi di aver selezionato l'opzione "Esci così com'è - Accedere come è".

(2) e mantenere le configurazioni rimanenti così come sono.

(3) al termine dell'installazione

(4) scrivere tutte le estensioni di file che vengono convertite in formato UNIX in un file di testo (extensions.txt).

ex:*.dsp
   *.dsw

(5) copia il file nel tuo clone Esegui il seguente comando in GITBASH

while read -r a;
do
find . -type f -name "$a" -exec dos2unix {} \;
done<extension.txt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.