Moja procedura postępowania z zakończeniami linii jest następująca (przetestowana na wielu repozytoriach):
Podczas tworzenia nowego repozytorium:
- wstaw
.gitattributes
pierwsze zatwierdzenie wraz z innymi typowymi plikami jako .gitignore
iREADME.md
W przypadku istniejącego repozytorium:
- Utwórz / zmodyfikuj
.gitattributes
odpowiednio
git commit -a -m "Modified gitattributes"
git rm --cached -r . && git reset --hard && git commit -a -m 'Normalize CRLF' -n"
-n
( --no-verify
ma pominąć haczyki poprzedzające zatwierdzenie)
- Muszę to robić wystarczająco często, by zdefiniować to jako alias
alias fixCRLF="..."
- powtórz poprzednie polecenie
- tak, to voodoo, ale generalnie muszę uruchomić polecenie dwa razy, za pierwszym razem normalizuje niektóre pliki, za drugim razem jeszcze więcej plików. Generalnie najlepiej chyba powtarzać, dopóki nie zostanie utworzone nowe zatwierdzenie :)
- przejdź kilka razy między starą (tuż przed normalizacją) a nową gałęzią. Po zmianie gałęzi czasami git znajdzie jeszcze więcej plików, które wymagają ponownej normalizacji!
W .gitattributes
oświadczam jawnie, że wszystkie pliki tekstowe mają LOL EOL, ponieważ ogólnie narzędzia Windows są kompatybilne z LF, podczas gdy narzędzia inne niż Windows nie są kompatybilne z CRLF (nawet wiele narzędzi wiersza poleceń nodejs zakłada LF i dlatego może zmieniać EOL w twoich plikach).
Zawartość .gitattributes
Mój .gitattributes
zwykle wygląda jak:
*.html eol=lf
*.js eol=lf
*.json eol=lf
*.less eol=lf
*.md eol=lf
*.svg eol=lf
*.xml eol=lf
Aby dowiedzieć się, jakie różne rozszerzenia są śledzone przez git w bieżącym repozytorium, spójrz tutaj
Problemy po normalizacji
Po wykonaniu tej czynności istnieje jeszcze jedno wspólne zastrzeżenie.
Powiedz, że Twój master
jest już aktualny i znormalizowany, a następnie do kasy outdated-branch
. Dość często zaraz po sprawdzeniu tej gałęzi, git zaznacza wiele plików jako zmodyfikowanych.
Rozwiązaniem jest wykonanie fałszywego commit ( git add -A . && git commit -m 'fake commit'
), a następnie git rebase master
. Po zmianie bazy fałszywe zatwierdzenie powinno zniknąć.