Te komunikaty są spowodowane nieprawidłową wartością domyślną core.autocrlf
w systemie Windows.
Koncepcja autocrlf
polega na transparentnym przetwarzaniu konwersji zakończeń linii. I robi to!
Zła wiadomość : wartość należy skonfigurować ręcznie.
Dobra wiadomość : należy to zrobić JEDEN czas na instalację gita (możliwe jest również ustawienie projektu).
Jak autocrlf
działa :
core.autocrlf=true: core.autocrlf=input: core.autocrlf=false:
repo repo repo
^ V ^ V ^ V
/ \ / \ / \
crlf->lf lf->crlf crlf->lf \ / \
/ \ / \ / \
Tutaj crlf
= marker końca linii w stylu win = = styl lf
uniksowy (i Mac OSX).
( cr
nie wpływa na pre-osx dla żadnej z trzech powyższych opcji)
Kiedy pojawia się to ostrzeżenie (w systemie Windows)
- autocrlf
= true
jeśli masz styl uniksowy lf
w jednym ze swoich plików (= RZADKO),
- autocrlf
= input
jeśli masz styl wygrywający crlf
w jednym ze swoich plików (= prawie ZAWSZE),
- autocrlf
= false
- NIGDY!
Co oznacza to ostrzeżenie
Ostrzeżenie „ LF zostanie zastąpione przez CRLF ” mówi, że (mając autocrlf
= true
) stracisz swój LF w stylu uniksowym po cyklu sprawdzania zmian (zostanie zastąpiony przez CRLF w stylu Windows). Git nie oczekuje, że użyjesz LF w stylu uniksowym pod Windows.
Ostrzeżenie „ CRLF zostanie zastąpione przez LF ” mówi, że (mając autocrlf
= input
) stracisz swój CRLF w stylu Windows po cyklu sprawdzania zmian (zostanie zastąpiony przez LF w stylu unixowym). Nie używaj input
pod oknami.
Jeszcze inny sposób pokazania, jak autocrlf
działa
1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x
gdzie x to CRLF (styl Windows) lub LF (styl unix), a strzałki oznaczają
file to commit -> repository -> checked out file
Jak naprawić
Wartość domyślna dla core.autocrlf
jest wybierana podczas instalacji gita i przechowywana w ogólnosystemowej gitconfig ( %ProgramFiles(x86)%\git\etc\gitconfig
). Są też (kaskadowanie w następującej kolejności):
- „globalny” (na użytkownika) gitconfig w ~/.gitconfig
, jeszcze inny
- „globalny” (na użytkownika) gitconfig w $XDG_CONFIG_HOME/git/config
lub
- $HOME/.config/git/config
i
„lokalny” (na repo) gitconfig .git/config
w działającym katalogu.
Napisz więc git config core.autocrlf
działający katalog, aby sprawdzić aktualnie używaną wartość i
- dodaj autocrlf=false
do całego systemu gitconfig # rozwiązanie dla systemu
- git config --global core.autocrlf false
# rozwiązanie dla użytkownika
- git config --local core.autocrlf false
# rozwiązanie dla projektu
Ostrzeżenia
- git config
ustawienia można zastąpić gitattributes
ustawieniami.
- crlf -> lf
konwersja następuje tylko podczas dodawania nowych plików, crlf
nie ma to wpływu na pliki już istniejące w repozytorium.
Morał (dla Windows):
- use core.autocrlf
= true
jeśli planujesz używać tego projektu również pod Uniksem (i nie chcesz konfigurować swojego edytora / IDE do używania zakończeń linii uniksowych),
- use core.autocrlf
= false
jeśli planujesz używać tego projektu tylko pod Windows ( lub skonfigurowałeś swój edytor / IDE do używania zakończeń linii uniksowych),
- nigdy nie używaj core.autocrlf
= input
chyba, że masz ku temu dobry powód ( np. jeśli używasz narzędzi unixowych pod Windows lub jeśli masz problemy z plikami makefile),
PS Co wybrać, instalując git dla Windows?
Jeśli nie zamierzasz używać żadnego z projektów w systemie Unix, nie zgadzaj się z domyślną pierwszą opcją. Wybierz trzeci ( Checkout as-is, commit as-is ). Nie zobaczysz tej wiadomości. Zawsze.
PPS Moje osobiste preferencje to konfiguracja edytora / IDE do używania zakończeń w stylu uniksowym i ustawienie core.autocrlf
na false
.