2013-08-27 11 views
27

W moim repozytorium, które ma mieszane zakończenia linii. Używam Mac OS X, i git 1.8.3.1Dlaczego poniższe polecenie jest niespójne w moim repozytorium?

Chciałbym renormalizować to repozytorium tak, aby każdy plik miał zakończenia linii, które zgadzają się z plikiem .gitattributes.

W tym celu mam wyrejestrowany ostatnią zmianę:

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 

Teraz git rm --cached -rf . spowoduje błąd, ale ja będąc bardzo paranoikiem z powyższego polecenia. (Na moim komputerze te polecenia były w jednym wierszu, ignorując kody wyjścia)

Powtarzam polecenie wiele razy. (Tj. UP; ENTER; UP; ENTER; UP; ENTER; ...)

W większości przypadków mam czyste konto, które nie jest tym, czego się spodziewam.

Jednak, mniej więcej raz na dziesięć razy, okazuje się, że otrzymuję trzy pliki (które wydają się być poprawnie renormalizowane). W pozostałym czasie nie ma renormalizacji.

Wyjście z takiego pliku, który pobiera renormalized (czyli jest „zmodyfikowany”) jest: atrybuty

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

My git plik ma sporą liczbę wpisów, ale istotne jeden jest tutaj:

* text=auto 
*.cs text eol=crlf 

Co może być nie tak?

+0

Należy zauważyć, że pliki, które pojawiają się jako zmodyfikowane, są tymi samymi, które pojawiają się w wyniku modyfikacji: "znajdź. -iname '* .cs' -exec unix2dos '{}' \; ' – Arafangion

+0

Oczywiście, normalizacja gita nie zawsze ma miejsce, i jestem zdezorientowany. – Arafangion

+0

Ten błąd nadal występuje w wersji 1.8.4 git z homebrew. – Arafangion

Odpowiedz

-3

Zawsze można użyć czegoś takiego jak skrypt sed do edycji plików, a następnie ponownie je, aby sprawdzić, czy tak się dzieje. Jeśli robisz to z wiersza poleceń, powinieneś, używając właściwego wyrażenia regularnego, wyciągnąć wszelkie ukryte znaki, które mogą być przyczyną problemu.

1

Wygląda na to, że to, co robisz, może być zbyt skomplikowane. Nie trzeba usuwać wszystkich plików z repozytorium ani ręcznie usuwać indeksu. Czy próbowałeś:

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" 

Jeśli to nie działa dla Ciebie bym ponownie sprawdzić wartości twojego core.autocrlf i .gitattributes. Być może trzeba będzie wyczyścić te, zresetować powłokę, sprawdzić ponownie repozytorium, a następnie zresetować je, aby uzyskać pożądane zachowanie.

Oto kilka innych zasobów, które mogą pomóc:

+0

Matt: Chciałem naprawić zakończenia linii w samym repozytorium, a nie tylko kopię roboczą. – Arafangion

Powiązane problemy