Le linee CRLF sono ok in un progetto Rails distribuito su Linux?
-
22-07-2019 - |
Domanda
Ho un repository Git (originariamente CVS, poi SVN, ora Git) contenente un progetto Rails che è stato distribuito su Linux da un po 'di tempo. Tutto sembra funzionare bene.
Ora che mi sono convertito in git, vedo che molti dei miei file nel repository contengono CRLF
terminazioni di riga . Mi piacerebbe che tutto fosse coerente ( LF
), ma non a scapito di perdere la cronologia delle modifiche di ogni file che ha terminazioni di riga CRLF
.
Riesci a pensare a qualsiasi motivo per cui non riesco a lasciare i file così come sono? Mi sembra di ricordare che c'è un problema con gli script di shell o i file cron o qualcosa che non ha risposto a < codice> CRLF molto bene.
Inoltre, conosco tutto sulle opzioni Git core.autocrlf
e core.safecrlf
, ma c'è un modo per farlo convertire tutti i file di testo da Da CRLF
a LF
al checkout (per il lato Linux) ... cioè un'opzione core.autolf o qualcosa di simile?
Soluzione
Se è corretto riscrivere la cronologia del repository (consultare problemi con la riscrittura della cronologia ) potresti usare git filter-branch per convertire CRLF in LF:
git filter-branch --tree-filter 'find . -path './.git' -prune -o -type f -exec dos2unix \{} \;' HEAD
Nota che se hai file binari nel tuo repository dovrai affinare il comando find per escluderli.
Altri suggerimenti
Un comment alla risposta di davitenio e il commento di Daniel Beardsley; Credo che potresti usare questo piccolo programma come wrapper per dos2unix:
#!/bin/sh
for f in $@; do
if [ $(file -b -n -i -m /dev/null $f | grep -c "text") -gt 0 ]; then
dos2unix $f
fi
done
sebbene probabilmente ci sia ancora qualche caso angolare che fallirà.