In vielen deutschen Unternehmen laufen Entwicklungsrechner unter Windows, während CI-Pipelines und Produktionsserver auf Linux setzen — genau dieser Bruch macht core.autocrlf zu keiner rein akademischen Einstellung, sondern zur Ursache echter Build-Fehler, wenn ein Shell-Skript mit CRLF-Zeilenenden im Container landet.
Woher die Trennung kommt
Unix und macOS verwenden ein einzelnes Zeichen — LF (Line Feed, \n). Windows hat von alten Fernschreibern ein Zeichenpaar geerbt — CRLF (Carriage Return + Line Feed, \r\n): ein Zeichen bringt den Wagen zurück an den Zeilenanfang, das andere bewegt ihn eine Zeile nach unten — eine wörtliche Nachahmung einer Schreibmaschine.
Warum das immer noch wichtig ist
- Git. Landet eine Datei mit CRLF in einem Repository, in dem andere Dateien LF verwenden, kann Git „die gesamte Datei geändert" anzeigen, obwohl nur eine Zeile bearbeitet wurde — weil sich technisch die Enden aller Zeilen geändert haben.
- Shebang-Skripte. Ein Unix-Shell-Skript mit CRLF-Enden kann im Docker-Container nicht ausgeführt werden, weil der Interpreter ein überschüssiges
\r-Zeichen in der ersten Zeile sieht. - String-Vergleich im Code. Eine aus einer CRLF-Datei gelesene Zeile kann beim Vergleich mit einem erwarteten LF-String nicht übereinstimmen, selbst wenn der sichtbare Text gleich aussieht.
Wie damit umgegangen wird
Git hat eine Einstellung (core.autocrlf), die Zeilenenden bei Checkout/Commit automatisch konvertiert — sich aber auf die lokale Konfiguration jedes Teammitglieds zu verlassen, ist unzuverlässig. Robuster ist eine im Repository versionierte .gitattributes-Datei, die den Stil pro Dateityp festschreibt, unabhängig davon, welcher Editor oder welches Betriebssystem gerade zum Einsatz kommt.
Wozu manuelle Konvertierung nötig ist
- Eine Datei korrigieren, die mit falschem Zeilenende-Stil ins Repository gelangt ist.
- Ein Skript für einen Linux-Deployment-Server vorbereiten, das in einem Windows-Editor bearbeitet wurde.
- Diagnostizieren, warum ein Textvergleich zweier scheinbar identischer Dateien einen Unterschied zeigt.
Gemischte Zeilenenden in einer Datei
Eine Datei, die in mehreren Editoren oder auf unterschiedlichen Betriebssystemen bearbeitet wurde, kann gleichzeitig CRLF und LF enthalten — ein Teil der Zeilen im einen Stil, ein Teil im anderen. Das ist der tückischste Fall: Die Konvertierung „zu LF" scheint auf den ersten Blick nichts an Zeilen zu ändern, die bereits LF hatten, aber es ist wichtig, die Umwandlung auf die gesamte Datei anzuwenden und nicht nur auf sichtbar „verdächtige" Zeilen, sonst bleibt das Problem verborgen.