2013-08-27 12 views
27

Nel mio repository, che ha terminazioni di linea miste. Sto usando Mac OS X e git 1.8.3.1Perché il seguente comando è incoerente nel mio repository?

Mi piacerebbe rinormalizzare questo repository in modo che ogni file abbia terminazioni di riga che sono d'accordo con il file .gitattributes.

A tal fine, ho controllato l'ultima modifica:

git checkout origin/develop 
git reset --hard 
git rm -rf . 
git rm --cached -rf . 
rm .git/index 
git checkout HEAD .gitattributes 
git reset --hard 
git status 

Ora, git rm --cached -rf . causerà un errore, ma mi viene molto paranoico con il comando precedente. (Sulla mia macchina, quei comandi erano su una riga, ignorando i codici di uscita)

Ripeto il comando molte volte. (Ie, UP; ENTER; UP; ENTER; UP; ENTER; ...)

Il più delle volte, ho un check out pulito, che non è quello che mi aspetto.

Tuttavia, all'incirca una volta ogni dieci volte, trovo che ottengo tre file (che sembrano essere rinormalizzati correttamente). I tempi rimanenti non sono rinormalizzati.

L'output di un file che viene rinormalizzata (Vale a dire, è 'modificato') è: attributi

$ file source/RemoveDuplications.cs 
source/RemoveDuplications.cs: UTF-8 Unicode (with BOM) C++ program text, with CRLF line terminators 

mio git file ha un discreto numero di voci, ma quello rilevante è qui:

Cosa potrebbe andare storto qui?

+0

Devo sottolineare che i file che appaiono come modificati sono gli stessi che appaiono modificati se lo faccio: 'find. -iname '* .cs' -exec unix2dos '{}' \; ' – Arafangion

+0

Chiaramente, la normalizzazione di git non avviene sempre, e io sono confuso. – Arafangion

+0

Questo errore si verifica ancora con git versione 1.8.4, da homebrew. – Arafangion

risposta

-3

Si può sempre usare qualcosa come uno script sed per modificare i file e quindi riprenderli per vedere se questo continua a succedere. Se lo fai dalla riga di comando, dovresti, usando la regex corretta, essere in grado di estrarre qualsiasi carattere nascosto che potrebbe causare il tuo problema.

1

Sembra che ciò che si sta facendo potrebbe essere eccessivamente complesso. Non è necessario rimuovere tutti i file dal repository o eliminare manualmente l'indice. Hai provato:

git rm --cached -r . # remove everything from the index 
git reset --hard  # replace files w/ corrected line endings 
git add .    # stage all changes 
git commit -m "Normalize line endings" 

Se questo non funziona per voi sarei ricontrollare i valori della vostra core.autocrlf e .gitattributes. Potrebbe essere necessario cancellarli, resettare la shell, controllare di nuovo il repo e quindi resettarli per ottenere il comportamento desiderato.

Qui ci sono alcune altre risorse che potrebbero aiutare:

+0

Matt: volevo sistemare le terminazioni di linea nel repository stesso, non solo la copia di lavoro. – Arafangion

Problemi correlati