Gemischte Zeilenenden: .gitattributes fehlt #26
Notifications
Total Time Spent: 54 minutes
florian.wilde
54 minutes
No due date set.
Dependencies
No dependencies set.
Reference: florian.wilde/betreuungs-cockpit#26
Reference in New Issue
Block a user
Problem
Im Repository liegen Dateien teils mit CRLF, teils mit LF. Beispiele mit
CRLF:
src/server/actions/papierkorb.ts,src/app/(app)/vorgaenge/[id]/page.tsx,tests/vorgaenge.test.ts.Die meisten anderen Dateien haben LF.
Es gibt keine
.gitattributes, die das vereinheitlicht.Warum das eine Falle ist
Ein zeilenweise arbeitendes Werkzeug —
sed -i, ein Formatierer, einSkript — schreibt die Datei mit LF zurück. Der Diff zeigt dann nicht die
drei geänderten Zeilen, sondern die ganze Datei. Genau das ist bei der
Arbeit an Issue #7 passiert (578 Diff-Zeilen statt 8); es fiel vor dem
Push auf, hätte aber ebenso gut durchgehen können.
Nebenwirkung:
git diff --checkmeldet bei CRLF-Dateien jede hinzugefügteZeile als „trailing whitespace", weil es das CR so wertet. Damit ist die
Prüfung für diese Dateien wertlos.
Was ich will
.gitattributesmit* text=auto eol=lf, damit im Repositoryeinheitlich LF steht
der nur Zeilenenden ändert — damit die Historie lesbar bleibt
.sh-Dateien ausdrücklich auf LF festnageln (ein CRLF im Shebangmacht das Update-Skript unter Linux unbrauchbar)
Akzeptanzkriterien
.gitattributesliegt im Wurzelverzeichnis\r\nmehr in versionierten Textdateiengit diff --checkmeldet für neue Änderungen keine falschenWhitespace-Treffer mehr
scripts/*.shbehalten ihr Ausführungsrecht und LF-EndenHinweis
Keine Migration. Der Normalisierungs-Commit berührt viele Dateien —
vorher sicherstellen, dass kein anderer Branch offen ist.
Angelegt auf Zuruf im Chat, nicht aus dem Dashboard — bitte in Nebula
nachtragen.
🚀 Umgesetzt und nach
mainübernommen.9ea78a4Zwei Commits, bewusst getrennt
.gitattributesmit* text=auto eol=lf— nur die Regel.git diff --ignore-cr-at-eoldarüber ist leer. Kein Zeichen Inhalt hat sich geändert. Beim Durchsehen der Historie lässt sich dieser Commit überspringen.Shell-Skripte stehen zusätzlich einzeln in der Datei — ein
\rim Shebang macht sie auf Linux unbrauchbar, und das sieht man ihnen nicht an. Nachgeprüft: alle drei enden auf\n, Ausführungsrecht 100755 unverändert.Danach: null CRLF-Dateien, Arbeitsbaum sauber, 137 von 137 End-to-End-Tests grün, 655 Unit-Tests, Typecheck und Lint sauber.
So prüfst du es
git switch main && git pullgit ls-files -z | xargs -0 file | grep -c CRLF→0git show --stat HEAD~1zeigt den Normalisierungs-Commit;git show HEAD~1 --ignore-cr-at-eolist leer.head -c 20 scripts/update.sh | od -c→ Shebang endet auf\n, nicht\r\n.Weder Changelog noch Version — sichtbar ändert sich nichts.