Diese Meldungen sind auf einen falschen Standardwert von core.autocrlf
unter Windows zurückzuführen.
Das Konzept von autocrlf
besteht darin, Zeilenendkonvertierungen transparent zu handhaben. Und das tut es!
Schlechte Nachrichten : Der Wert muss manuell konfiguriert werden.
Gute Nachricht : Es sollte nur EINMAL pro Git-Installation durchgeführt werden (pro Projekteinstellung ist auch möglich).
Wie autocrlf
funktioniert :
core.autocrlf=true: core.autocrlf=input: core.autocrlf=false:
repo repo repo
^ V ^ V ^ V
/ \ / \ / \
crlf->lf lf->crlf crlf->lf \ / \
/ \ / \ / \
Hier crlf
= Win-Style-End-of-Line-Marker, lf
= Unix-Style (und Mac OSX).
(Pre-Osx ist cr
für keine der drei oben genannten Optionen betroffen)
Wann wird diese Warnung angezeigt (unter Windows)
- autocrlf
= true
wenn Sie einen Unix-Stil lf
in einer Ihrer Dateien haben (= RARELY),
- autocrlf
= input
wenn Sie einen Win-Stil crlf
in einer Ihrer Dateien haben (= fast IMMER),
- autocrlf
= false
- NIE!
Was bedeutet diese Warnung?
Die Warnung " LF wird durch CRLF ersetzt " besagt, dass Sie (mit autocrlf
= true
) Ihren LF im Unix-Stil nach dem Commit-Checkout-Zyklus verlieren (er wird durch CRLF im Windows-Stil ersetzt). Git erwartet nicht, dass Sie LF im Unix-Stil unter Windows verwenden.
Die Warnung " CRLF wird durch LF ersetzt " besagt, dass Sie (mit autocrlf
= input
) Ihre CRLF im Windows-Stil nach einem Commit-Checkout-Zyklus verlieren (sie wird durch LF im Unix-Stil ersetzt). Nicht input
unter Fenstern verwenden.
Ein weiterer Weg, um zu zeigen, wie es autocrlf
funktioniert
1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x
Dabei ist x entweder CRLF (Windows-Stil) oder LF (Unix-Stil) und Pfeile stehen für
file to commit -> repository -> checked out file
Wie repariert man
Der Standardwert für core.autocrlf
wird während der Git-Installation ausgewählt und in der systemweiten gitconfig ( %ProgramFiles(x86)%\git\etc\gitconfig
) gespeichert . Auch gibt es (Kaskadierung in der folgenden Reihenfolge):
- "globale" (pro Benutzer) gitconfig befindet sich unter ~/.gitconfig
, noch eine andere
- "globale" (pro Benutzer) gitconfig bei $XDG_CONFIG_HOME/git/config
oder $HOME/.config/git/config
und
- "lokale" (pro repo) gitconfig bei .git/config
im Arbeitsverzeichnis.
Schreiben Sie also git config core.autocrlf
in das Arbeitsverzeichnis, um den aktuell verwendeten Wert und zu überprüfen
- autocrlf=false
zur systemweiten gitconfig hinzufügen # pro system lösung
- git config --global core.autocrlf false
# pro benutzer lösung
- git config --local core.autocrlf false
# pro projekt lösung
Warnungen
- git config
Einstellungen können durch gitattributes
Einstellungen überschrieben werden .
- Die crlf -> lf
Konvertierung erfolgt nur beim Hinzufügen neuer Dateien. crlf
Dateien, die bereits im Repo vorhanden sind, sind nicht betroffen.
Moral (für Windows):
- Verwenden Sie core.autocrlf
=, true
wenn Sie dieses Projekt auch unter Unix verwenden möchten (und Ihren Editor / Ihre IDE nicht für die Verwendung von Unix-Zeilenenden konfigurieren möchten).
- Verwenden Sie core.autocrlf
=, false
wenn Sie dieses Projekt nur unter Windows verwenden möchten ( oder Sie haben Ihren Editor / Ihre IDE so konfiguriert, dass Unix-Zeilenenden verwendet werden.
- Verwenden Sie niemalscore.autocrlf
=, es input
sei denn, Sie haben einen guten Grund dazu ( z. B. wenn Sie Unix-Dienstprogramme unter Windows verwenden oder wenn Sie auf Makefiles-Probleme stoßen).
PS Was ist bei der Installation von git für Windows zu wählen?
Wenn Sie keines Ihrer Projekte unter Unix verwenden möchten, stimmen Sie der ersten Standardoption nicht zu. Wählen Sie die dritte aus ( Checkout wie sie ist, Commit wie sie ist ). Sie werden diese Nachricht nicht sehen. Je.
PPS Meine persönliche Präferenz ist die Konfiguration des Editors / der IDE für die Verwendung von Endungen im Unix-Stil und die Einstellung core.autocrlf
auf false
.