Es sind manchmal viele Kleinigkeiten in einem Projekt in einer Gruppe, die Mitarbeiter ziemlich nerven können. Neben offensichtlichen Dingen wie Clean Code und einheitliche Bennung von Dateien, Klassen und Methoden, ist eine Sache die häufiger im Zusammenspiel zwischen Windows- und Linux-Nutzern stört: Der Zeilenumbruch.

Im Windows-Universum besitzen Zeilenumbrüche ein CR LF und unter Linux LF. Näheres zu Zeilenumbrüchen findet sich im entsprechenden Wikipedia-Artikel zu Zeilenumbrüchen.

Git Repositorys sollten immer nur LF als Zeilenendung enthalten, da gemischte Zeilenenden sich auf den Betriebssystemen unterschiedlich auswirken und einfach unschön in der Handhabung sind. Für Windows-Nutzer kann beim Auschecken automatisch LF durch CR LF ersetzt werden. Ebenso sollten immer die CR LF in LF umgewandelt werden, wenn man etwas in das Repository eincheckt. In der Git für Windows Standard-Installation wird nachgefragt, wie Zeilenumbrüche gehandhabt werden sollen. Im Standard wird die zuvor beschriebene automatische Umwandlung vorgeschlagen, die man akzeptieren sollte.

Nichtsdestotrotz schaffen es einige, solche Optionen abzuwählen und es landen am Ende Dateien mit gemischten Zeilenenden im Repository was ziemlich unschön ist. Am „schönsten“ ist es etwa dann, wenn Projekt-Mitarbeiter eine Zeile in einer Datei ändern, durch die Änderung aber jede Zeile der Datei anpassen und das ohne weitere Prüfung in das Repository schieben.

Das ganze lässt sich auf mehreren Weisen verhindern. Prinzipiell hilft es die Personen natürlich aufzuklären, warum man einheitliche Zeilenumbrüche verwenden sollte und wie man es konfiguriert. Die Konfiguration für jede Person ist prinzipiell recht simpel. Dazu muss lediglich der Konfigurationsschalter core.autocrlf auf input gesetzt werden, wenn man unter Linux oder macOS arbeitet. Unter Windows sollte jedenfalls core.autocrlf auf true gesetzt werden. In dem Fall wird dann die zuvor angesprochene automatische Umwandlung aktiviert. Die Konfiguration kann entweder in ~/.gitconfig händisch erfolgen oder man nutzt diesen Befehl:

$ git config --global core.autocrlf true

Dies führt allerdings noch nicht vollständig dazu, dass bestehende Zeilenumbrüche die in Dateien vorhanden sind, korrigiert werden. Dazu helfen Tools wie dos2unix, aber auch Git hilft dabei, wenn man geänderte Dateien neu eincheckt.

Damit nicht nur die lokale Konfiguration jedes Projekt-Mitarbeiters korrekt konfiguriert ist, kann man zusätzlich auf das Repository die Einstellungen durchsetzen. Dazu muss die Datei .gitattributes im Repository hinterlegt werden, in dem die Zeile * text=auto enthalten ist. Nachdem die Datei committet wurde und/oder die Änderung in der Config steht, meldet Git beim Commiten von Dateien mit CR LF folgende Meldung:

$ git add chapter02/
warning: CRLF wird in Projektdokumentation/chapter02/cryptdb/02_problem.tex durch LF ersetzt.
Die Datei wird ihre ursprünglichen Zeilenenden im Arbeitsverzeichnis behalten.

Anschließend lebt es sich angenehmer, wenn direkt alle Projekt-Mitarbeiter die korrekte Einstellung nutzen.