Ich habe ein Git-Repository, das von sowohl Windows als auch OS X aus zugegriffen wird und das bereits einige Dateien mit CRLF-Zeilenumbrüchen enthält. Soweit ich das beurteilen kann, gibt es zwei Möglichkeiten, damit umzugehen:
-
Setze
core.autocrlf
überall auffalse
, -
Befolge die Anweisungen hier (auf GitHub's Hilfeseiten wiederholt), um das Repository nur LF-Zeilenumbrüche enthalten zu lassen und setze danach
core.autocrlf
auftrue
auf Windows undinput
auf OS X. Das Problem dabei ist, dass falls ich binäre Dateien im Repository habe, die:- nicht korrekt als binär in der gitattributes-Datei markiert sind, und
- sowohl CRLFs als auch LFs enthalten,
sie beschädigt werden. Es ist möglich, dass mein Repository solche Dateien enthält.
Also warum sollte ich die Umwandlung der Zeilenumbrüche in Git nicht einfach ausschalten? Im Internet gibt es viele vage Warnungen darüber, dass das Ausschalten von core.autocrlf
Probleme verursachen kann, aber sehr wenige spezifische; die einzigen, die ich bisher gefunden habe, sind, dass kdiff3 nicht mit CRLF-Zeilenumbrüchen umgehen kann (für mich kein Problem) und dass einige Texteditoren Probleme mit Zeilenumbrüchen haben (ebenfalls kein Problem für mich).
Das Repository ist intern in meinem Unternehmen, und daher muss ich mir keine Gedanken darüber machen, es mit Personen zu teilen, die unterschiedliche autocrlf-Einstellungen oder Zeilenumbruchanforderungen haben.
Gibt es irgendwelche anderen Probleme, wenn ich die Zeilenumbrüche so lasse, wie sie sind und nicht ändere, von denen ich nichts weiß?
4 Stimmen
Würde stackoverflow.com/questions/2333424/… helfen? Es enthält einen Link zu spezifischen Gründen,
autocrlf
auf false zu lassen.6 Stimmen
@VonC Danke, aber ich bin bereits in der Lage zu diktieren, dass alle Benutzer im Unternehmen
autocrlf
auf false setzen und glaube derzeit, dass dies die beste Option ist. Aber ich möchte wissen, ob es Gründe gibt, warum ich das nicht tun sollte, weil ich feststellen kann, dass es viele Leute (z.B. GitHub) gibt, die sagen, dass autocrlf eingestellt werden sollte, aber keine konkreten Gründe dafür angeben.5 Stimmen
@VonC d. h. Ich suche nicht nach Gründen, um
autocrlf
auf false zu setzen. Ich suche nach Gründen, um es auf true zu setzen.0 Stimmen
Ok (Ich wurde durch die Antwort auf die letzte Frage, "nur Zeilenumbrüche so zu belassen", die "
autocrlf
auffalse
gesetzt ist, in die Irre geführt). Ich habe eine Antwort verfasst, um das Gegenteil zu behandeln (auftrue
gesetzt), aber noch nichts sehr endgültiges.19 Stimmen
Warum nicht
autocrlf = input
verwenden: Es scheint die perfekte Lösung zwischen den beiden Extremen zu sein: Sie halten Ihr Repository sauber von CRLF-Müll frei, und lokal können Windows-Entwickler verwenden, was sie wollen, ohne dass an ihren lokalen Dateien automatisch etwas Magisches getan wird. (Sie möchten möglicherweise LF lokal aus verschiedenen Gründen, daher isttrue
meiner Meinung nach schlecht.) Ich sehe keine Nachteile darin,autocrlf = input
zu verwenden.2 Stimmen
@iconoclast,
autocrlf = input
führt dazu, dassstash --patch
mit der Fehlermeldung "Kann Arbeitsverzeichnisänderungen nicht entfernen" fehlschlägt.0 Stimmen
@PiotrFindeisen: Sehr interessant. Es gibt also definitiv einen Nachteil. Es hört sich für mich wie ein Bug an. Scheitert es nur, wenn Git zwischen Zeilenenden übersetzt, oder scheitert es immer, wenn Sie
autocrlf = input
verwenden?0 Stimmen
@iconoclast, Ich habe dies nicht umfassend getestet. Heute habe ich nur festgestellt, dass ich nichts verstecken kann, bis ich die
autocrlf
-Einstellung entferne. Die problematische Datei wurde mit CRLF im Repository gespeichert - vielleicht ist dies eine nicht unterstützte Kombination?0 Stimmen
@PiotrFindeisen: Können Sie überhaupt kein stashen mit
autocrlf = input
oder nur mit--patch
?0 Stimmen
Ich habe nicht nachgeschaut. Ich kann nicht ohne den
--stash
Schalter leben.14 Stimmen
@iconclast, ein Grund, auf den ich gestoßen bin, ist, wenn Sie Distributionen erstellen, die sowohl Windows-Batchdateien als auch Unix-Shellskripte enthalten. Sie möchten in jedem Fall das richtige Zeilenende verwenden, und das ist schwieriger zu tun, wenn Git Dinge durcheinander bringt, auch nachdem Sie sie ausdrücklich auf eine bestimmte Weise eingestellt haben.