Questi messaggi sono dovuti a un valore predefinito errato di core.autocrlf
su Windows.
Il concetto di autocrlf
è di gestire le conversioni dei finali di linea in modo trasparente. E lo fa!
Cattive notizie : il valore deve essere configurato manualmente.
Buone notizie : dovrebbe essere eseguito UNA SOLA volta per installazione di git (è possibile anche l'impostazione del progetto).
Come autocrlf
funziona :
core.autocrlf=true: core.autocrlf=input: core.autocrlf=false:
repo repo repo
^ V ^ V ^ V
/ \ / \ / \
crlf->lf lf->crlf crlf->lf \ / \
/ \ / \ / \
Qui crlf
= marker di fine riga in stile win, lf
= unix-style (e mac osx).
(pre-osx cr
non è interessato per nessuna delle tre opzioni sopra)
Quando viene visualizzato questo avviso (in Windows)
- autocrlf
= true
se hai lf
uno stile unix in uno dei tuoi file (= RARAMENTE),
- autocrlf
= input
se hai crlf
uno stile win in uno dei tuoi file (= quasi SEMPRE),
- autocrlf
= false
- MAI!
Cosa significa questo avviso
L'avviso " LF sarà sostituito da CRLF " dice che tu (avendo autocrlf
= true
) perderai il tuo LF in stile unix dopo il ciclo di commit-checkout (sarà sostituito da CRLF in stile Windows). Git non si aspetta che tu usi LF in stile unix sotto Windows.
L'avviso " CRLF sarà sostituito da LF " dice che tu (avendo autocrlf
= input
) perderai il tuo CRLF in stile Windows dopo un ciclo di commit-checkout (sarà sostituito da LF in stile unix). Non usare input
sotto Windows.
Ancora un altro modo per mostrare come autocrlf
funziona
1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x
dove x è CRLF (stile windows) o LF (stile unix) e le frecce indicano
file to commit -> repository -> checked out file
Come risolvere
Il valore predefinito per core.autocrlf
è selezionato durante l'installazione di git e memorizzato in gitconfig ( %ProgramFiles(x86)%\git\etc\gitconfig
) a livello di sistema. Inoltre ci sono (a cascata nel seguente ordine):
- "global" (per utente) gitconfig situato in ~/.gitconfig
, ancora un altro
- "global" (per utente) gitconfig at $XDG_CONFIG_HOME/git/config
oppure $HOME/.config/git/config
e
- "local" (per-repo) gitconfig at .git/config
nella directory di lavoro.
Quindi, scrivere git config core.autocrlf
nella directory di lavoro per verificare il valore attualmente utilizzato e
- aggiungere autocrlf=false
a gitconfig # soluzione per sistema di sistema
- git config --global core.autocrlf false
# soluzione per utente
- git config --local core.autocrlf false
# soluzione per progetto
Avvertenze
: le git config
impostazioni possono essere ignorate dalle gitattributes
impostazioni.
- la crlf -> lf
conversione avviene solo quando si aggiungono nuovi file, i crlf
file già esistenti nel repository non sono interessati.
Morale (per Windows):
- use core.autocrlf
= true
se si prevede di utilizzare questo progetto anche in Unix (e non si desidera configurare il proprio editor / IDE per utilizzare le terminazioni di linea unix),
- use core.autocrlf
= false
se si prevede di utilizzare questo progetto solo in Windows ( o hai configurato il tuo editor / IDE per utilizzare le terminazioni di linea unix),
- non usare maicore.autocrlf
= a input
meno che tu non abbia una buona ragione per ( ad esempio se stai usando utility unix sotto Windows o se riscontri problemi di makefile),
PS Cosa scegliere quando si installa git per Windows?
Se non utilizzerai nessuno dei tuoi progetti in Unix, non concordare con la prima opzione predefinita. Scegli il terzo ( Acquista così com'è, esegui il commit così com'è ). Non vedrai questo messaggio. Mai.
PPS La mia preferenza personale è la configurazione dell'editor / IDE per utilizzare i finali in stile Unix e l'impostazione core.autocrlf
su false
.