Ich verstehe die Komplexität der CrLf-Einstellungen in git nicht : core.autocrlf
,core.safecrlf
Ich entwickle ein plattformübergreifendes Projekt in einem Team und möchte, dass sowohl Windows- als auch Linux-Entwickler zusammenarbeiten können, ohne dass Git-Markierungsdateien nur aufgrund des Zeilenendstils als geändert markiert werden.
Was bedeuten die verschiedenen Einstellungen? Welche Konsequenzen hätte die Auswahl einer der Optionen? Und was wäre die beste Lösung für meinen Fall?
Ja, ich bin mir dieser Frage bewusst und die Antworten dort waren nicht aufschlussreich und daher nicht hilfreich.
Antworten:
Die drei Werte für
autocrlf
:true
- Wenn Inhalt in das Repository gelangt (festgeschrieben wird), werden seine Zeilenenden in LF konvertiert, und wenn Inhalt aus dem Repository kommt (ausgecheckt wird), werden die Zeilenenden in CRLF konvertiert. Dies ist im Allgemeinen für ahnungslose Windows-Benutzer / Editoren gedacht. Unter der Annahme, dass ein Editor (oder Benutzer) Dateien mit CRLF-Endungen erstellen wird und ausflippt, wenn normale LF-Endungen angezeigt werden, Sie jedoch LF-Endungen im Repo möchten, wird dies Sie hoffentlich abdecken. Es ist jedoch möglich, dass etwas schief geht. In den verknüpften Fragen finden Sie Beispiele für falsche Zusammenführungskonflikte und Berichte über geänderte Dateien.input
- Wenn Inhalte in das Repository gelangen, werden ihre Zeilenenden in LF konvertiert, aber der Inhalt bleibt auf dem Weg nach draußen unberührt. Dies liegt im Wesentlichen im selben Bereich wietrue
unter der Annahme, dass die Editoren tatsächlich korrekt mit LF-Endungen umgehen können. Sie schützen sich nur vor der Möglichkeit, versehentlich eine Datei mit CRLF-Endungen zu erstellen.false
- git befasst sich überhaupt nicht mit Zeilenenden. Es liegt an dir. Dies ist, was viele Leute empfehlen. Wenn mit dieser Einstellung die Zeilenenden einer Datei durcheinander gebracht werden sollen, müssen Sie sich dessen bewusst sein, sodass Zusammenführungskonflikte viel weniger wahrscheinlich sind (vorausgesetzt, informierte Benutzer). Die Schulung von Entwicklern in der Verwendung ihrer Editoren / IDEs kann das Problem so gut wie lösen. Alle Editoren, die ich für Programmierer gesehen habe, sind in der Lage, damit umzugehen, wenn sie richtig konfiguriert sind.Beachten Sie, dass dies
autocrlf
keine Auswirkungen auf Inhalte hat, die sich bereits im Repository befinden. Wenn Sie zuvor etwas mit CRLF-Endungen festgelegt haben, bleiben diese so. Dies ist ein sehr guter Grund, um abhängig von autocrlf zu vermeiden; Wenn ein Benutzer es nicht eingestellt hat, kann er Inhalte mit CRLF-Endungen in das Repo aufnehmen, und es bleibt bestehen. Eine stärkere Möglichkeit, die Normalisierung zu erzwingen, ist das Textattribut . Wenn Sie esauto
für einen bestimmten Pfad auf setzen, wird es für die Normalisierung am Zeilenende markiert, vorausgesetzt, git entscheidet, dass der Inhalt Text ist (nicht binär).Eine verwandte Option ist
safecrlf
, die im Grunde nur eine Möglichkeit ist, um sicherzustellen, dass Sie keine CRLF-Konvertierung für eine Binärdatei irreversibel durchführen.Ich habe nicht viel Erfahrung im Umgang mit Windows-Problemen und Git, daher ist Feedback zu Implikationen / Fallstricken auf jeden Fall willkommen.
quelle
dos2unix
(wiefromdos
in einigen Systemen verpackt , denke ich) ist der Standardweg, um dies zu tun. Und ja, ich würde wirklich empfehlen, autocrlf nicht zu verwenden. Wenn Sie versuchen möchten, Zeilenenden zu normalisieren, ist das Text-Gitattribut ein viel saubererer Weg, und ich glaube, es wurde in den letzten Versionen von Git verbessert.Ich habe 3 mögliche Werte für Commit- und Checkout-Fälle untersucht und dies ist die resultierende Tabelle:
Ich würde empfehlen,
core.autocrlf = input
plattformübergreifend zu verwenden. In diesem Fall wird GitCRLF
implizit konvertiertLF
, und vorhandene DateienLF
bleiben unverändert.quelle
core.autocrlf
Verhalten hängt nicht vom Betriebssystemtyp ab. Aber wenn ich mich nicht irre, ist der Standardwert unter Windowstrue
und unter Linux -input
. Eine weitere Sache, die Probleme verursachen kann, ist, dass die meisten IDEs unter Windows so konfiguriert sind, dass sie standardmäßig CRLF für neue Dateien und unter Linux - LF verwenden.input
und umgestellttrue
. Die Tabelle von Srikanth Popuri unten sieht für mich richtig aus.Zu Ihrer Information: Standardmäßig akzeptiert die in Windows endende Zeile CRLF und Linux LF. Die folgende Tabelle dient zum besseren Verständnis.
In den obigen tabellarischen Informationen hebt das Symbol * die Unterschiede zwischen Windows und Unix hervor. Im Folgenden finden Sie auf einen Blick die CLRF-Informationen, die auf den Betriebssystemplattformen basieren:
Für Windows-Benutzer
core.autocrlf=true
für Windows-Computer undcore.autocrlf=input
für Unix-Computer gelten.core.autocrlf=true
oder seincore.autocrlf=false
. Diescore.autocrlf=input
führt jedoch in diesem Fall zu Problemen.Für Unix-Benutzer (Linux / Mac OS)
core.autocrlf=true
für Windows-Computer undcore.autocrlf=input
für Unix-Computer gelten.core.autocrlf=input
oder seincore.autocrlf=false
. Diescore.autocrlf=true
führt jedoch in diesem Fall zu Problemen.Für dieselben Betriebssystembenutzer
core.autocrlf=false
.quelle