Staram się, aby git nie zmieniał żadnych zakończeń linii dla żadnej operacji. Niestety wydaje się, że tak się dzieje, niezależnie od wszystkiego. Sprowadziłem to do następującego przypadku testowego, który ma tyle różnych mechanizmów wyłączania tego zachowania, ile mogłem znaleźć.
- Rozpocznij od dwóch komputerów (komputer z systemem Windows = A, komputer z systemem Linux = B)
- Na obu maszynach:
git config --global core.autocrlf false - Na obu komputerach:
git config --global core.eol crlf(na wszelki wypadek)
- Utwórz nowe repozytorium na A. Z pustego folderu:
git init --shared(następnie odkryj utworzony.gitkatalog)- Utwórz nowy plik
.gitignorew repozytorium - Utwórz nowy plik
.gitattributesw repozytorium za pomocą jednej linii:* -text git add ., a następniegit commit -m "initial commit"obejść, np . to .git branch master_recv- Dodaj piloty
- Utwórz nowy plik
document.txtw repozytorium zawierającym CRLF - Commit:
git add -Awięcgit commit -m "<something>" - Zwróć uwagę, że A
document.txtnadal zawiera CRLF (a usunięcie go i zresetowanie za pomocą--hardzwraca wersję nadal z CRLF)
- SCP cały katalog na komputer B
- Dodaj nowy plik
new filezawierający CRLF - Commit:
git add -Awięcgit commit -m "<something>" - Zauważ, że oba
document.txtB i Bnew filenadal zawierają CRLF
- Pociągnij mistrza B do A:
git pull <remote> master:master_recv - A
document.txtzmieniło się na LF. Dodany pliknew filezawiera również LF.
Problem nie występuje, jeśli B to komputer z systemem Windows.


core.autocrlfzawsze był fałszywy? Wygląda na to, że masz już\nzakończenia linii w repozytorium? Nie ma ustawienia do zmiany\nw repozytorium na\r\nw katalogu roboczym.