Diese Meldungen sind auf einen falschen Standardwert von core.autocrlfunter Windows zurückzuführen.
Das Konzept von autocrlfbesteht 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 autocrlffunktioniert :
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 crfür keine der drei oben genannten Optionen betroffen)
Wann wird diese Warnung angezeigt (unter Windows)
- autocrlf= truewenn Sie einen Unix-Stil lfin einer Ihrer Dateien haben (= RARELY),
- autocrlf= inputwenn Sie einen Win-Stil crlfin 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 inputunter Fenstern verwenden.
Ein weiterer Weg, um zu zeigen, wie es autocrlffunktioniert
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.autocrlfwird 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/configoder $HOME/.config/git/configund
- "lokale" (pro repo) gitconfig bei .git/configim Arbeitsverzeichnis.
Schreiben Sie also git config core.autocrlfin das Arbeitsverzeichnis, um den aktuell verwendeten Wert und zu überprüfen
- autocrlf=falsezur 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 configEinstellungen können durch gitattributesEinstellungen überschrieben werden .
- Die crlf -> lfKonvertierung erfolgt nur beim Hinzufügen neuer Dateien. crlfDateien, die bereits im Repo vorhanden sind, sind nicht betroffen.
Moral (für Windows):
- Verwenden Sie core.autocrlf=, truewenn 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=, falsewenn 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 inputsei 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.autocrlfauf false.