Mein Verfahren für den Umgang mit den Zeilenenden ist wie folgt (Kampf auf vielen Repos getestet):
Beim Erstellen eines neuen Repos:
- Setzen Sie
.gitattributesdas allererste Commit zusammen mit anderen typischen Dateien als .gitignoreund einREADME.md
Beim Umgang mit einem bestehenden Repo:
.gitattributesEntsprechend erstellen / ändern
git commit -a -m "Modified gitattributes"
git rm --cached -r . && git reset --hard && git commit -a -m 'Normalize CRLF' -n"
-n (--no-verify ist es, Pre-Commit-Hooks zu überspringen)
- Ich muss es oft genug tun, um es als Alias zu definieren
alias fixCRLF="..."
- Wiederholen Sie den vorherigen Befehl
- Ja, es ist Voodoo, aber im Allgemeinen muss ich den Befehl zweimal ausführen, beim ersten Mal werden einige Dateien normalisiert, beim zweiten Mal noch mehr Dateien. Im Allgemeinen ist es wahrscheinlich am besten zu wiederholen, bis kein neues Commit erstellt wird :)
- Gehen Sie einige Male zwischen dem alten (kurz vor der Normalisierung) und dem neuen Zweig hin und her. Nach dem Wechseln des Zweigs findet git manchmal noch mehr Dateien, die neu normalisiert werden müssen!
In .gitattributesIch erkläre alle Textdateien explizit als LF EOL, da Windows-Tools im Allgemeinen mit LF kompatibel sind, während Nicht-Windows-Tools nicht mit CRLF kompatibel sind (selbst viele Befehlszeilentools von nodejs setzen LF voraus und können daher die EOL in Ihren Dateien ändern).
Inhalt von .gitattributes
Mein .gitattributessieht normalerweise so aus:
*.html eol=lf
*.js eol=lf
*.json eol=lf
*.less eol=lf
*.md eol=lf
*.svg eol=lf
*.xml eol=lf
Um herauszufinden, welche unterschiedlichen Erweiterungen von git im aktuellen Repo verfolgt werden, klicken Sie hier
Probleme nach der Normalisierung
Sobald dies erledigt ist, gibt es noch eine weitere Einschränkung.
Angenommen, Sie mastersind bereits auf dem neuesten Stand und normalisiert, und dann checken Sie aus outdated-branch. Sehr oft markiert git viele Dateien direkt nach dem Auschecken dieses Zweigs als geändert.
Die Lösung besteht darin, ein falsches Commit ( git add -A . && git commit -m 'fake commit') durchzuführen und dann git rebase master. Nach dem Rebase sollte das gefälschte Commit verschwinden.