2011-12-28 16 views
40

Jestem nowy dla git i potrzebuję pomocy. Używam msysgit w systemie Windows.Git, dodawanie plików do repozytorium daje fatalny błąd dla LF -> CRLF

Kiedy wykonać polecenie git add [folderName] otrzymuję odpowiedź:

fatal: LF would be replaced by CRLF in [.css file or .js file] 

a następnie, jeśli starają się zrobić popełnić nic się nie dzieje.

$ git commit 
# On branch master 
# 
# Initial commit 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  so01/ 
nothing added to commit but untracked files present (use "git add" to track) 

Niektóre z tych plików css/js zostały pobrane z sieci, więc sądzę, że właśnie dlatego mają LF. Po otwarciu pliku i wycięciu/wklejeniu zawartości, pojawia się błąd w następnym pliku i tak dalej.

Każda pomoc będzie mile widziane.

Edit

Ustawianie core.autocrlf false wydaje się rozwiązać ten problem, ale czytałem na wielu stanowiskach nie ustawić tę opcję na wartość false.

Czy ktoś może wskazać mi, gdzie mogę się dowiedzieć, jakie problemy mogą pojawić się w tej sytuacji?

+0

Pracujesz z innymi, które są w środowisku innym niż Windows? –

+2

Nie. Pracuję nad małą aplikacją, którą dodam do aplikacji. Jak dotąd wszystko jest dobrze, ale chciałem wiedzieć, jaka jest różnica w tych opcjach. Po zakończeniu aplikacji mam zamiar zrobić trochę reasrch, ale w międzyczasie i ja użyję SO dla szybkiego rozwiązania. – user619656

+0

To jeszcze jeden powód, aby ustawić autokorel na false. Nie potrzebujesz bólu głowy. Niech pliki zostaną zatwierdzone bez zmian. Szkoda, że ​​domyślne ustawienia podczas instalacji msysgit przyjmują najgorszą opcję. –

Odpowiedz

22

Ufaj redaktorom kodu, aby manipulowali zakończeniami linii. Auto crlf powinno być fałszywe. Nie pozwól, aby kontrola nad źródłami stała się zbyt inteligentna. Jeśli nie potrzebujesz swojego narzędzia kontroli źródła, aby zmienić zakończenia linii, nie rób tego. To będzie bolało.

Aby powtórzyć z zaakceptowanej odpowiedzi: "Jeśli nie widzisz konkretnego leczenia, które musi radzić sobie z natywnym eol, lepiej jest pozostawić autocrlf na false".

także z książki progit na końcu sekcji dotyczącej autocrlf:

„Jeśli jesteś programistą systemu Windows robi Windows tylko projekt, można wyłączyć tę funkcję, nagrywanie powraca przewozu w repozytorium przez ustawienie wartości config false”

Jedyna pomoc, jaką mogę dać jest to, że jeśli wziąć inną trasą, zapoznać się z vim -b który pokaże znaki specjalne, takie jak CR w msysgit i git show HEAD:path/to/your/file.txt który powinien pokazać plik w taki sposób, w jaki git go zapisał.

Ustaw core.whitespace cr-at-eol, aby łaty i różnice nie podświetlały CR jako możliwego, problematycznego spacji.

Nie warte kłopotów. Przechowuj tak, jak jest.

+0

Auto crlf powinno być fałszywe <- To nie jest prawda w Windows – prusswan

+2

tak jest prawdą w oknach. Ponownie, nie rób nic poza autocrlf = false. Robię to przez ostatnie 4 lata z wieloma zespołami w windows/.net. Możesz zrobić inne rzeczy, które padną i zranić siebie. W końcu ustawisz autocrlf na false. –

+3

Dlaczego twoje anegdotyczne dowody charakterystyczne dla Windows/.net są ważniejsze niż inne i co jest polecane na http://progit.org/book/ch7-1.html? – prusswan

6

Problem prawdopodobnie występuje, ponieważ ustawiono Git do przechowywania plików wewnętrznie z crlf z ustawieniem core.eol. Po dodaniu pliku Git ostrzega, że ​​zmieni go na format wewnętrzny.

Git działa najlepiej z zakończeniami linii lf, więc jeśli to możliwe, zawsze pracuj z core.eol = lf.

To powinno wyjaśnić kiedy używać core.autocrlf, Why should I use core.autocrlf=true in Git?

Można również użyć core.safecrlf. Sprawdź git config --help, aby uzyskać szczegółowe informacje na temat ustawień.

+0

Odpowiedź, na którą się powołujesz, brzmi: "Jeśli nie widzisz konkretnego leczenia, które musi radzić sobie z natywnym eol, lepiej jest pozostawić autocrlf na false". –

+0

Nie jestem pewien, dlaczego otrzymałem skargę w tej sprawie? Czy coś przeoczyłem? @AdamDymitruk Daje również kilka przypadków, w których można go użyć. Myślę, że warto wiedzieć, dlaczego ta opcja istnieje (jeśli nie powinienem jej używać, dlaczego mogę ją ustawić?) – m0tive

24

Bardzo nowość w tym ustawieniu core.autocrlf na false nie miała dla mnie większego sensu. Więc dla innych początkujących, przejdź do pliku konfiguracyjnego w twoim folderze .git i dodaj:

[core] 
    autocrlf = false 

pod nagłówkiem [core].

+11

lub z wiersza poleceń ... git config core.autocrlf false – petercoles

0

Autodetekcja git formatów działa całkiem dobrze. Dlatego core.autocrlf=true to naprawdę dobry pomysł na Windows.

Mówiąc git config --global core.safecrlf=false mówi git: Hej, proszę przekonwertować moje błędne końca linii (LF), aby zakończeń linii Windows (CRLF) i nie przeszkadza mi to.

Dlatego należy naprawdę wyłączyć core.safecrlf.

Dłuższa odpowiedź na: https://stackoverflow.com/a/15471083/873282

+0

@downvoters: Proszę krótko wyjaśnić, dlaczego popierasz tę odpowiedź. Pomaga to (i) innym zrozumieć, dlaczego ta odpowiedź nie ma głosów i (ii) poprawić odpowiedź. – koppor

Powiązane problemy