2009-10-21 20 views
46

Ho impostato Git in modo che non commetta fine linea incoerente. Il problema è che un'intera pila di file appare modificata anche se non lo sono. Cosa devo digitare per fare in modo che questi file abbiano le terminazioni di linea fissate sul lato locale?Rendi Git "LF verrà sostituito da CRLF" gli avvisi vanno via

# git checkout dev 
M src/au/policy/dao/EmailQueue.java 
M src/au/policy/dao/EmailQueueFactory.java 
M src/au/policy/dao/PolicyPublisher.java 
Already on 'dev' 

# git diff 
warning: LF will be replaced by CRLF in src/au/policy/dao/EmailQueue.java 
warning: LF will be replaced by CRLF in src/au/policy/dao/EmailQueueFactory.java 
warning: LF will be replaced by CRLF in src/au/policy/dao/PolicyPublisher.java 

Questo è quello che ho aggiunto al mio file di configurazione git che sembra fare quello che ho inteso a parte questo problema:

autocrlf = true 
+0

Cancellare i file incriminati e ricontrollarli in qualche modo è possibile? – corydoras

+0

Sì, se non vi sono altre differenze oltre alle terminazioni dei collegamenti, è sufficiente eliminare e ricontrollare i file incriminati. –

+0

Correlata, ma non necessariamente una domanda doppia: [git che sostituisce LF con CRLF] (http://stackoverflow.com/questions/1967370/git-replacing-lf-with-crlf). –

risposta

16

Si può solo cancellare e ri-checkout i file incriminati dall'indice come questo:

rm <files> 
git checkout -- <files> 

Oppure, se sono gli unici file modificati (attenzione con questo comando), è possibile creare script piace questo:

git diff --name-only --diff-filter=M | xargs rm -- 
git checkout -- . 

in un sistema GNU è possibile utilizzare un tubo di un po 'più sicura, ma non sembrano avere spazi o altri caratteri di delimitazione nei nomi dei file in ogni caso.

git diff -z --name-only --diff-filter=M | xargs -0 rm -- 
24

L'unica cosa che mi viene in mente è quello di verificare se core.safecrlf è impostato su warn.

git config --get core.safecrlf

Io penso valori possibili sono true, false e warn. Credo che l'impostazione su false risolva l'avviso, anche se potrebbe non essere una buona idea.

+0

Impostarlo su false lo ha fatto. Grazie! –

+1

Questo probabilmente nasconde semplicemente il messaggio ma continua a mantenere l'effetto del cambiamento cr/lf. –

+1

L'impostazione di 'safecrlf' su' false' può corrompere i file binari, per cui il valore predefinito è 'warn'. – Walf

60

Questo potrebbe accadere se si cambia core.autocrlf variabile di configurazione (se ho capito bene il problema).

Se siete a stato pulito, vale a dire subito dopo il commit, e voi non avere cambiamenti uncomitted, costretto ri-checkout e la rimozione di indice dovrebbe fare il trucco:

Il comando di seguito git reset --hard HEAD volontà fai in modo che il tuo ramo corrente faccia riferimento all'ultimo commit e tutto il codice non vincolato andrà perso. Assicurarsi di commettere il codice o prendere il backup

$ rm .git/index 
$ git reset --hard HEAD 

Questo, credo, sarebbe sincronizzare entrambi i file dell'area di lavoro, e l'indice (area di gestione temporanea) per seguire le impostazioni CRLF.

+3

Ovviamente conosci il tuo idiota, ha funzionato alla grande per me. Grazie! Veramente! Grazie mille! –

+0

dovrebbe considerare questa come una risposta accettata. ben lavorato @jakub –

2

Prova questo, ha funzionato per me:

cd src/au/policy/dao 
dos2unix 

Se non ci sono altri file in quella cartella, quindi ti consigliamo di suddividerlo in quanto segue (in caso contrario si cercherà di farlo su ogni file in qualsiasi sottodirectory, che può richiedere un po '):

cd src/au/policy/dao 
dos2unix EmailQueue.java 
dos2unix EmailQueueFactory.java 
dos2unix PolicyPublisher.java 

correva molto veloce sulla mia macchina e fissato tutti i fine riga, ed è un po' più semplice e più facile che alcune di queste altre correzioni.

+0

non funziona per me. – luckytaxi

31

Ho riscontrato questo problema durante la creazione di un nuovo progetto Xcode. La mia soluzione per questo problema:

In scrittura terminale

$: git config --global --edit 

Poi nella modifica del file di configurazione git safecrlf-falso. Le mie impostazioni:

[core] 
    autocrlf = input 
    safecrlf = false 

So che git ha strumenti di linea cmd per questo, ma non funzionano per me. E poi Xcode crea repository git senza alcun problema.

+2

@Andrei È probabile che utilizzi [vim] (http://www.vim.org/) come editor, premi escape per uscire dalla modalità di input e digita ': wq' per salvare e uscire. – GP89

+0

l'unica soluzione che ha funzionato per me, tutti gli altri falliti, in "git versione 1.8.1.msysgit.1" windows 7 (git bash) –

Problemi correlati