Questi messaggi sono dovuti a un valore predefinito errato di core.autocrlfsu 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 autocrlffunziona :
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 crnon è interessato per nessuna delle tre opzioni sopra)
Quando viene visualizzato questo avviso (in Windows)
- autocrlf= truese hai lfuno stile unix in uno dei tuoi file (= RARAMENTE),
- autocrlf= inputse hai crlfuno 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 inputsotto Windows.
Ancora un altro modo per mostrare come autocrlffunziona
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/configoppure $HOME/.config/git/confige
- "local" (per-repo) gitconfig at .git/confignella directory di lavoro.
Quindi, scrivere git config core.autocrlfnella directory di lavoro per verificare il valore attualmente utilizzato e
- aggiungere autocrlf=falsea 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 configimpostazioni possono essere ignorate dalle gitattributesimpostazioni.
- la crlf -> lfconversione avviene solo quando si aggiungono nuovi file, i crlffile già esistenti nel repository non sono interessati.
Morale (per Windows):
- use core.autocrlf= truese 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= falsese 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 inputmeno 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.autocrlfsu false.