Ich habe ein Git-Repository, auf das sowohl unter Windows als auch unter OS X zugegriffen wird und von dem ich weiß, dass es bereits einige Dateien mit CRLF-Zeilenenden enthält. Soweit ich das beurteilen kann, gibt es zwei Möglichkeiten, damit umzugehen:
Stellen Sie
core.autocrlf
zufalse
überall,Befolgen Sie die Anweisungen hier (auf den Hilfeseiten von GitHub), um das Repository so zu konvertieren, dass es nur LF-Zeilenenden enthält, und setzen Sie
core.autocrlf
es anschließendtrue
auf Windows undinput
OS X. Das Problem dabei ist, dass ich Binärdateien im Repository habe Das:- sind in Gitattributen nicht korrekt als binär markiert, und
- zufällig sowohl CRLFs als auch LFs enthalten,
Sie werden beschädigt. Möglicherweise enthält mein Repository solche Dateien.
Warum sollte ich die Konvertierung von Git am Ende nicht einfach deaktivieren? Es gibt viele vage Warnungen im Internet, dass das core.autocrlf
Ausschalten Probleme verursacht, aber nur sehr wenige spezifische . Das einzige, was ich bisher gefunden habe, ist, dass kdiff3 keine CRLF-Endungen verarbeiten kann (für mich kein Problem) und dass einige Texteditoren Probleme mit dem Zeilenende haben (auch für mich kein Problem).
Das Repository befindet sich in meinem Unternehmen, sodass ich mich nicht darum kümmern muss, es für Personen mit unterschiedlichen Autocrlf-Einstellungen oder Zeilenendanforderungen freizugeben.
Gibt es andere Probleme, wenn ich nur die Zeilenenden so belasse, wie ich es nicht weiß?
quelle
autocrlf
falsch gehe.autocrlf
auf false zu setzen . Ich suche nach Gründen, um es auf wahr zu setzen.autocrlf = input
: Es scheint die perfekte Lösung zwischen den beiden Extremen zu sein: Sie halten Ihr Repo sauber von CRLF-Mist, und lokal können Windows-Entwickler verwenden, was sie wollen, ohne dass ihre lokalen Dateien automatisch etwas Magisches bewirken. (Sie möchten LF möglicherweise aus verschiedenen Gründen lokal, dahertrue
ist es meiner Meinung nach schlecht.) Ich kann keine Nachteile bei der Verwendung feststellenautocrlf = input
.Antworten:
Die einzigen spezifischen Gründe, auf die gesetzt werden muss
autocrlf
,true
sind:git status
, alle Ihre Dateien anzuzeigen,modified
da beim Klonen eines Unix-basierten EOL Git-Repos auf ein Windows-Repo automatisch EOL konvertiert wird (siehe z. B. Problem 83 ).Sofern Sie eine spezifische Behandlung sehen , die müssen mit nativer EOL beschäftigen, sind Sie besser dran , verlassen
autocrlf
zufalse
(git config --global core.autocrlf false
).Beachten Sie, dass diese Konfiguration lokal ist Konfiguration handelt (da die Konfiguration nicht von Repo zu Repo verschoben wird).
Wenn Sie für alle Benutzer, die dieses Repo klonen, dieselbe Konfiguration wünschen, lesen Sie " Was ist die beste
CRLF
Handhabungsstrategie mit git? ". Verwenden Sie dazu dastext
Attribut in der.gitattributes
Datei .Beispiel:
Hinweis: Ab Git 2.8 (März 2016) führen Zusammenführungsmarkierungen keine gemischten Zeilenenden (LF) mehr in eine CRLF-Datei ein.
Siehe " Git dazu bringen, CRLF für die Zusammenführungslinien" <<<<<<< HEAD "zu verwenden ".
quelle
autocrlf=false
. Wissen Sie aus Interesse, warum git die EOL-Konvertierung auch dann noch durchführt, wenn Sie autocrlf auf false gesetzt haben?core.autocrlf=false
ich in meinem Szenario nicht verwenden sollte, wenn ich ein Tool / einen Editor hätte, das durch die Zeilenenden verwirrt würde?false
, ich war noch nie ein großer Fan von automatischen oder magischen Dingen, die im Hintergrund passieren. Verwenden Sie einfach\n
undUTF-8
überall und es wird Ihnen gut gehen. Wenn ein Nusskopf nicht versteht, dass es Konventionen und Regeln gibt, und vergisst,UTF-8
oder zu verwenden\n
, dann konvertiert jemand sie manuell und schlägt ihm ins Gesicht.core.eol
Attribute in einer.gitattributes
Datei anzugeben , anstatt diese globalecore.autocrlf
Einstellung zu verwenden, die wahllos für alle Dateien gilt.Ich bin ein .NET-Entwickler und benutze Git und Visual Studio seit Jahren. Meine starke Empfehlung ist, die Zeilenenden auf true zu setzen. Und tun Sie dies so früh wie möglich in der Lebensdauer Ihres Repositorys.
Davon abgesehen hasse ich es, dass Git meine Zeilenenden ändert. Eine Quellcodeverwaltung sollte nur die von mir ausgeführte Arbeit speichern und abrufen, sie sollte sie NICHT ändern. Je. Aber es tut.
Was passiert, wenn nicht jeder Entwickler auf true gesetzt ist, ist, dass EIN Entwickler schließlich auf true gesetzt wird. Dadurch werden die Zeilenenden aller Ihrer Dateien in Ihrem Repo in LF geändert. Wenn Benutzer auf "Falsch" setzen, werden Sie von Visual Studio gewarnt und aufgefordert, diese zu ändern. Sie werden 2 Dinge sehr schnell passieren lassen. Erstens erhalten Sie immer mehr dieser Warnungen. Je größer Ihr Team ist, desto mehr erhalten Sie. Das zweite und schlimmere ist, dass es zeigt, dass jede Zeile jeder geänderten Datei geändert wurde (weil die Zeilenenden jeder Zeile vom wahren Kerl geändert werden). Schließlich können Sie Änderungen in Ihrem Repo nicht mehr zuverlässig verfolgen. Es ist VIEL einfacher und sauberer, alle dazu zu bringen, wahr zu bleiben, als zu versuchen, alle falsch zu halten. So schrecklich es auch ist, mit der Tatsache zu leben, dass Ihre vertrauenswürdige Quellcodeverwaltung etwas tut, was sie nicht tun sollte. Je.
quelle
\r\n
und Sie werden sehen.true
"? Warum würden Sie ihnen das überhaupt erlauben? Wenn Sie sie für den Zugriff auf Git Repo einrichten, können Sie bestimmte Bereiche nicht mit unterschiedlichen Langs verschmutzen (damit jeder, der daran arbeitet, sie lesen kann), oder Sie behalten Zweige / Zusammenführungen / Rebases / usw. entlang der ausgewählten Politik sollten sie eine klare Regel bekommen: Stellen Sie die richtige crlf ein.Update 2 :
Xcode 9 scheint eine "Funktion" zu haben, mit der die aktuellen Zeilenenden der Datei ignoriert werden. Verwenden Sie stattdessen einfach Ihre Standardeinstellung für das Zeilenende, wenn Sie Zeilen in eine Datei einfügen, was zu Dateien mit gemischten Zeilenenden führt.
Ich bin mir ziemlich sicher, dass dieser Fehler in Xcode 7 nicht vorhanden war. Ich bin mir bei Xcode 8 nicht sicher. Die gute Nachricht ist, dass es in Xcode 10 behoben zu sein scheint.
Für die Zeit, in der es existierte, verursachte dieser Fehler eine kleine Heiterkeit in der Codebasis, auf die ich mich in der Frage beziehe (die bis heute verwendet wird
autocrlf=false
), und führte dazu, dass viele "EOL" -Commit-Nachrichten und schließlich ein Git-pre-commit
Hook geschrieben wurden, um dies zu überprüfen für / verhindern das Einführen von gemischten Leitungsenden.Update :
Hinweis: Wie von VonC, von Git Start 2.8, merge Marker wird nicht Unix-Zeilenende zu einer Windows-style - Datei einführen .
Original :
Ein kleines Problem, das mir bei diesem Setup aufgefallen ist, ist, dass bei Zusammenführungskonflikten die Zeilen, die git hinzufügt, um die Unterschiede zu kennzeichnen, keine Windows-Zeilenenden haben, selbst wenn der Rest der Datei dies tut, und Sie am Ende enden können mit einer Datei mit gemischten Zeilenenden, z.
Dies verursacht uns keine Probleme (ich kann mir vorstellen, dass jedes Tool, das beide Arten von Zeilenenden verarbeiten kann, auch mit gemischten Zeilenenden sinnvoll ist - sicherlich alle, die wir verwenden), aber es ist etwas, das Sie beachten sollten.
Die andere Sache *, die wir gefunden haben, ist, dass beim
git diff
Anzeigen von Änderungen an einer Datei mit Windows-Zeilenenden die hinzugefügten Zeilen ihre Zeilenumbrüche anzeigen, also:* Es verdient nicht wirklich den Begriff: "Problem".
quelle