Questa risposta sembra rilevante poiché il PO fa riferimento alla necessità di una soluzione multi-OS. Questo articolo della guida di GitHub descrive in dettaglio gli approcci disponibili per la gestione delle terminazioni di linee tra sistemi operativi. Esistono approcci globali e per repo per la gestione delle terminazioni di linea cross-os.
Approccio globale
Configurare la gestione delle terminazioni di riga Git su Linux o OS X:
git config --global core.autocrlf input
Configurare la gestione delle terminazioni di riga di Git su Windows:
git config --global core.autocrlf true
Approccio per repo:
Nella radice del tuo repository, crea un .gitattributes
file e definisci le impostazioni di fine riga per i tuoi file di progetto, una riga alla volta nel seguente formato: path_regex line-ending-settings
dove line-ending-settings
è uno dei seguenti:
- testo
- binario (file per i quali Git non dovrebbe modificare le terminazioni di riga, poiché ciò può causare il mancato rendering in un browser di alcuni tipi di immagine come i PNG)
Il text
valore può essere ulteriormente configurato per istruire Git su come gestire le terminazioni di riga per i file corrispondenti:
text
- Cambia le terminazioni di riga in terminazioni di riga native del sistema operativo.
text eol=crlf
- Converte le terminazioni di riga in al momento CRLF
del pagamento.
text eol=lf
- Converte le terminazioni di riga in al momento LF
del pagamento.
text=auto
- Impostazione predefinita ragionevole che lascia l'handle di linea alla discrezione di Git.
Ecco il contenuto di un file .gitattributes di esempio:
# Set the default behavior for all files.
* text=auto
# Normalized and converts to
# native line endings on checkout.
*.c text
*.h text
# Convert to CRLF line endings on checkout.
*.sln text eol=crlf
# Convert to LF line endings on checkout.
*.sh text eol=lf
# Binary files.
*.png binary
*.jpg binary
Maggiori informazioni su come aggiornare il repository dopo aver modificato le impostazioni delle terminazioni di riga qui . TLDR:
eseguire il backup dei file con Git, eliminare tutti i file nel repository (tranne la directory .git), quindi ripristinare i file tutti in una volta. Salva i tuoi file attuali in Git, in modo che nessuno dei tuoi lavori vada perso.
git add . -u
git commit -m "Saving files before refreshing line endings"
Rimuovi l'indice e forza Git a ripetere la scansione della directory di lavoro.
rm .git/index
Riscrivi l'indice Git per riprendere tutte le nuove terminazioni di riga.
git reset
Mostra i file riscritti e normalizzati.
In alcuni casi, questo è tutto ciò che deve essere fatto. Altri potrebbero dover completare i seguenti passaggi aggiuntivi:
git status
Aggiungi di nuovo tutti i file modificati e preparali per un commit. Questa è la tua occasione per controllare quali file, se presenti, sono rimasti invariati.
git add -u
È perfettamente sicuro vedere molti messaggi qui che leggono [s] "avvertimento: CRLF sarà sostituito da LF nel file."
Riscrivi il file .gitattributes.
git add .gitattributes
Salva le modifiche nel tuo repository.
git commit -m "Normalize all the line endings"