Przeczytałem wiele różnych pytań i odpowiedzi na temat przepełnienia stosu, a także dokumentację git na temat działania ustawienia core.autocrlf .
Oto moje zrozumienie z tego, co przeczytałem:
Klienci Unix i Mac OSX (wcześniejsi niż OSX używają CR) używają zakończeń linii LF.
Klienci Windows używają zakończeń linii CRLF.
Gdy core.autocrlf jest ustawiony na true na kliencie, repozytorium git zawsze przechowuje pliki w formacie końca linii LF, a zakończenia linii w plikach na kliencie są konwertowane tam i z powrotem przy kasie / zatwierdzeniu dla klientów (tj. Windows), którzy używają innych niż -LF zakończenia linii, bez względu na format plików zakończenia linii na kliencie (nie zgadza się to z definicją Tima Clema - patrz aktualizacja poniżej).
Oto macierz, która próbuje udokumentować to samo dla ustawień „wejściowych” i „fałszywych” core.autocrlf ze znakami zapytania, w których nie jestem pewien zachowania konwersji kończącego linię.
Moje pytania to:
- Jakie powinny być znaki zapytania?
- Czy ta matryca jest poprawna dla „znaków niekwestionowanych”?
Zaktualizuję znaki zapytania w odpowiedziach, ponieważ wydaje się, że osiągnięto konsensus.
wartość core.autocrlf true wejście false -------------------------------------------------- -------- popełnić | nawrócić? ? nowy | na LF (konwersja na LF?) (bez konwersji?) popełnić | Konwertuj na ? Nie istniejący | Konwersja LF (konwersja na LF?) kasa | Konwertuj na ? Nie istniejący | Konwersja CRLF (bez konwersji?)
Tak naprawdę nie szukam opinii na temat zalet i wad różnych ustawień. Po prostu szukam danych, które wyjaśniają, jak można oczekiwać, że git będzie działał z każdym z trzech ustawień.
-
Aktualizacja 17.04.2012 : Po przeczytaniu artykułu Tima Clema połączonego przez JJD w komentarzach zmodyfikowałem niektóre wartości w „nieznanych” wartościach w powyższej tabeli, a także zmieniłem „kasy” istniejące | true do konwersji na CRLF zamiast konwertować na klienta ". Oto podane przez niego definicje, które są bardziej jasne niż cokolwiek, co widziałem gdzie indziej:
core.autocrlf = false
Jest to ustawienie domyślne, ale większość ludzi zachęca się do natychmiastowej zmiany. W wyniku użycia fałszu Git nigdy nie zadziera z zakończeniami linii w twoim pliku. Możesz rejestrować pliki za pomocą LF, CRLF lub CR lub jakiejś losowej mieszanki tych trzech, a Git nie dba o to. Może to utrudniać odczytanie różnic i utrudnia scalanie. Większość ludzi pracujących w świecie Unix / Linux używa tej wartości, ponieważ nie mają problemów z CRLF i nie potrzebują Git do wykonywania dodatkowej pracy za każdym razem, gdy pliki są zapisywane w bazie danych obiektów lub zapisywane w katalogu roboczym.
core.autocrlf = true
Oznacza to, że Git przetworzy wszystkie pliki tekstowe i dopilnuje, aby CRLF został zastąpiony przez LF podczas zapisywania tego pliku w bazie danych obiektów i przekształcił wszystkie LF z powrotem w CRLF podczas zapisywania do katalogu roboczego. Jest to zalecane ustawienie w systemie Windows, ponieważ zapewnia, że repozytorium może być używane na innych platformach, zachowując jednocześnie CRLF w katalogu roboczym.
core.autocrlf = dane wejściowe
Oznacza to, że Git przetworzy wszystkie pliki tekstowe i dopilnuje, aby CRLF został zastąpiony LF podczas zapisywania tego pliku w bazie danych obiektów. Nie zrobi to jednak odwrotnie. Kiedy odczytasz pliki z bazy danych obiektów i zapiszesz je w katalogu roboczym, nadal będą miały wartości LF do oznaczenia końca linii. To ustawienie jest zwykle używane w systemach Unix / Linux / OS X, aby zapobiec zapisywaniu CRLF w repozytorium. Pomysł polega na tym, że jeśli wkleisz kod z przeglądarki internetowej i przypadkowo umieścisz CRLF w jednym ze swoich plików, Git upewni się, że zostały one zastąpione LF podczas pisania do bazy danych obiektów.
Artykuł Tima jest doskonały, jedyne, co mogę o tym myśleć, to to, że zakłada, że repozytorium ma format LF, co niekoniecznie jest prawdą, szczególnie w przypadku projektów wyłącznie dla systemu Windows.
Porównanie artykułu Tima z najwyżej ocenioną dotychczas odpowiedzią autorstwa jmlane pokazuje doskonałą zgodność co do prawdziwych i wejściowych ustawień oraz brak zgody co do fałszywych ustawień.
autocrlf
się fałszu wydaje się o wiele łatwiejsze;) stackoverflow.com/questions/2333424/…