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?

È stato utile?

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à.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top