Conventional Commits und commitlint: Ein neuer Standard für das Verfassen von Commit-Nachrichten

Freitag, 10. Januar 2025

Die nicht zu unterschätzende Bedeutung von Commit-Nachrichten

Wer kennt es nicht? Man schreibt im Laufe des Tages mehrmals Commit-Nachrichten im Zuge der Entwicklung. Jedes Mal denkt man, dass man die Änderungen gut zusammenfassen müsste, aber oft fällt es schwer, eine klare Zusammenfassung zu produzieren.

Commit-Nachrichten sind sogar noch wichtiger, wenn man zu einem späteren Zeitpunkt den Code erneut betrachtet. Egal, ob man sich an eigene, längst vergessene Arbeiten erinnert oder den Code eines Teamkollegen durchgeht – eine gute Commit-Nachricht kann Wunder wirken.

Gut geschriebene Commit-Nachrichten sind auf lange Sicht eine Art Versicherung, die die Produktivität des Teams erhöht und beim Debugging sehr hilfreich ist. Das Problem liegt darin, dass es oft keine festen Vorgaben gibt. Eine konsistente und klare Commit-Nachricht zu schreiben, fühlt sich ohne Konventionen ähnlich an wie die Benennung von Variablen ohne Regeln.

Conventional Commits

Hier kommen die Conventional Commits ins Spiel. Diese konventionellen Regeln verlangen, dass man aus vordefinierten Typen wählt und den Anwendungsbereich sowie das Thema beschreibt.

Diese einfachen Regeln ermöglichen es, konsistente und standardisierte Commit-Nachrichten zu schreiben. Da sie zudem mit Semantic Versioning kompatibel sind, versprechen sie auch eine erhöhte Produktivität.

Die wichtigsten Regeln lauten wie folgt:

Grundregeln

  1. Format: Das Format lautet type(scope): subject.

    • type: Art der Änderung (z.B. feat, fix, docs, style, refactor, test usw.).
    • scope (optional): Bereich oder Modul der Änderung.
    • subject: Kurze Beschreibung der Änderungen.
  2. Body: Bei Bedarf können zusätzliche Erklärungen zu den Änderungen geschrieben werden.

  3. Beispiele:

feat(auth): Nutzeranmeldefunktion hinzufügen
fix(api): Nullzeiger-Ausnahme in der Fetch-Methode beheben
docs: Readme mit Installationsanweisungen aktualisieren

Verbindung zu Semantic Versioning

Wenn Sie Semantic Versioning nutzen, können Commit-Nachrichten automatisch und systematisch zur Versionskontrolle eingesetzt werden, z.B.:

  • feat(auth): add user login functionality → Hinzufügen einer neuen Funktion → v1.1.0
  • fix(api): resolve null pointer exception → Behebung eines Bugs → v1.1.1
  • feat(payment): add credit card support → Weitere Funktion → v1.2.0

Zusammenfassend haben die Conventional Commits folgende Vorteile:

  • Konsistenz: Konsistente Commit-Nachrichten vereinfachen die Historie des Projekts.
  • Integration mit Automatisierungstools: Erstellen von Release-Notes, CI/CD-Pipeline-Integration und vieles mehr können nahtlos verbunden werden.
  • Effiziente Code-Reviews: Änderungsabsichten lassen sich schnell nachvollziehen und überprüfen.
  • Erhöhte Erweiterbarkeit: Selbst bei wachsendem Projektumfang ist die Wartung mit konsistenten Commit-Nachrichten einfach.

Sogar ein Linter ist verfügbar: (commitlint)

Die Hauptfunktionen von commitlint sind folgende:

  1. Überprüfung auf Conventional Commits: Prüfen, ob Nachrichten dem Format type(scope): subject folgen.
  2. Anpassbarkeit: Regeln können entsprechend den Team-Anforderungen hinzugefügt oder geändert werden.
  3. CI/CD-Integration: commitlint kann in Pipelines integriert werden, um Commit-Validierungen durchzuführen.
  4. Integration mit Husky: Git-Hooks werden genutzt, um Commit-Nachrichten automatisch zu prüfen.

In der Regel ist das Einbinden von commitlint in ein Projekt einfach und bietet viele Vorteile. Hat das Team beschlossen, Conventional Commits zu verwenden, ist commitlint eine empfehlenswerte Ergänzung. Detaillierte Informationen finden Sie auf der commitlint offiziellen Website.

Selbstverständlich kann jede Person ihre Nachricht ordentlich schreiben, aber Menschen neigen dazu, Fehler zu machen. Werden Commit-Nachrichten durch Fehler nach und nach ergänzt, entsteht letztlich ein Durcheinander.

Es ist effizienter, sich über einen Computer zu ärgern, der einen Commit blockiert, als Kollegen über ungewöhnliche Nachrichten zu kritisieren, speziell wenn man sich auf Regeln geeinigt hat.

Konsistente Commit-Nachrichten: Der erste Schritt zur Steigerung der Teamproduktivität

Commit-Nachrichten sind mehr als nur eine Aufzeichnung von Änderungen; sie sind ein wertvolles Werkzeug zur Projekthistorie und Unterstützung reibungsloser Zusammenarbeit. Wenn mehrere Entwickler zusammenarbeiten, erleichtern konsistente Commit-Nachrichten den Code-Review und das Verfolgen von Änderungen.

Auch auf individueller Ebene reduzieren klare Regeln unnötige Gedankengänge und unterstützen das Verfassen präziser Nachrichten. Mit Tools wie commitlint werden Nachrichten automatisch überprüft, Fehler vermieden und die CI/CD-Integration verbessert.

Warum nicht ein kleines Ritual einführen, um konsistente Nachrichten zu schreiben? Es mag am Anfang unbequem sein, aber langfristig wird es maßgebend zur Steigerung der Teamproduktivität beitragen.