Git-Hooks: Nie wieder unsaubere Commits

Maximilian Reinke

Git

Entwicklungsstrategie

In der modernen Softwareentwicklung ist die Einhaltung von Standards und die Sicherung der Codequalität ein Muss. Git bietet eine Funktion, die dabei helfen kann: Git-Hooks. Diese automatischen Skripte können bei bestimmten Ereignissen im Git-Workflow ausgelöst werden, um Prüfungen durchzuführen oder Aktionen zu automatisieren. Sie sind besonders nützlich, um unsaubere Commits zu verhindern und die Entwicklererfahrung (Dev-Experience) zu verbessern.

Git-Hooks sind vielseitig einsetzbar und können speziell auf die Bedürfnisse eines Projekts angepasst werden. In diesem Artikel erfahren Sie, wie Sie Git-Hooks in Node-Projekten einsetzen und optimal nutzen können, um Ihren Workflow effizienter und sauberer zu gestalten.

Was sind Git-Hooks?

Git-Hooks sind Skripte, die automatisch ausgeführt werden, wenn bestimmte Aktionen in einem Git-Repository durchgeführt werden. Sie ermöglichen es, den Git-Workflow zu erweitern und vor oder nach bestimmten Ereignissen, wie einem Commit oder Merge, zusätzliche Aktionen auszuführen.

Ein Git-Hook kann beispielsweise sicherstellen, dass alle Commits bestimmten Regeln entsprechen, oder dass nach einem Merge automatische Aufgaben erledigt werden. Hooks werden lokal in einem Projekt gespeichert und können so angepasst werden, dass sie teamübergreifend zur Qualitätssicherung beitragen.

Es gibt verschiedene Arten von Git-Hooks, die bei unterschiedlichen Aktionen ausgelöst werden können. Zwei der am häufigsten verwendeten Hooks sind:

Pre-Commit Hook

Ausführung: Vor dem Commit

Zweck: Vor dem Commit können Pre-Commit Hooks genutzt werden, um sicherzustellen, dass der Code den Qualitätsanforderungen entspricht. Dieser Hook wird ausgeführt, bevor Änderungen endgültig im Git-Repository festgeschrieben werden.

Anwendungsbeispiele:

  • Linting des Codes, um Stilrichtlinien durchzusetzen.
  • Automatische Formatierung des Codes.
  • Durchführung von Tests, um sicherzustellen, dass keine fehlerhaften Änderungen committet werden.

Ein Pre-Commit Hook kann besonders hilfreich sein, um die Codequalität hoch zu halten und Fehler frühzeitig zu erkennen. Dadurch wird verhindert, dass fehlerhafter oder unformatierter Code in das Repository gelangt.

Post-Merge Hook

Ausführung: Nach einem Merge

Zweck: Dieser Hook wird ausgeführt, nachdem ein Merge-Prozess abgeschlossen ist. Er kann verwendet werden, um nachträgliche Aufgaben zu automatisieren, die in einem Projekt notwendig sind.

Anwendungsbeispiele:

  • Automatisches Löschen von Branches, die nach einem erfolgreichen Merge nicht mehr benötigt werden.
  • Aktualisieren von Abhängigkeiten oder Dateien, die durch den Merge beeinflusst wurden.

Dieser Hook ist besonders nützlich, um den Entwicklungsprozess zu straffen und manuelle Nacharbeiten zu reduzieren.

Git-Hooks in Node-Projekten konfigurieren

Git-Hooks können in jedem Git-Repository eingerichtet werden. In einem Node-Projekt ist es möglich, Git-Hooks automatisch zu konfigurieren, indem man ein prepare-Script in die package.json einfügt. Mit diesem Ansatz lassen sich Git-Hooks so einstellen, dass sie beim Installieren der Abhängigkeiten (npm install) automatisch aktiviert werden.

Hier ein Beispiel, wie Sie einen commit-msg Hook in einem Node-Projekt einrichten können:

package.json:

"scripts": {
  "prepare": "chmod +x .hooks/commit-msg && git config core.hooksPath .hooks"
}

In diesem Fall wird beim Ausführen des npm install Befehls der commit-msg Hook aktiviert, der im Verzeichnis .hooks gespeichert ist. Der Hook stellt sicher, dass Commit-Nachrichten einem bestimmten Format entsprechen.

Commit-Nachrichten standardisieren: Der commit-msg Hook

Ein häufiger Anwendungsfall für Git-Hooks ist die Standardisierung von Commit-Nachrichten. Um ein konsistentes Format für Commit-Nachrichten zu gewährleisten, kann ein commit-msg Hook verwendet werden. Das folgende Beispielskript stellt sicher, dass alle Commits dem „Conventional Commits“-Standard folgen, der typischerweise für größere Projekte verwendet wird.

commit-msg Hook:

#!/bin/bash
commit_msg_file=$1

# Lese die Commit-Nachricht aus der Datei
commit_msg=$(cat "$commit_msg_file")

# Definiere das Regex-Muster für Conventional Commits
pattern="^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: .+"

# Überprüfe, ob die Commit-Nachricht dem Muster entspricht
if [[ ! $commit_msg =~ $pattern ]]; then
    echo "Error: Commit message does not follow conventional commit format"
    echo "Please use the format: <type>(<scope>): <description>"
    echo "Example: feat(login): add validation for email field"
    exit 1
fi

# Wenn die Commit-Nachricht korrekt ist, erfolgreich beenden
exit 0

Erklärung des Skripts:

  • Das Skript liest die Commit-Nachricht aus einer Datei.
  • Es prüft, ob die Nachricht dem „Conventional Commits“-Muster entspricht. Dieses Muster erfordert, dass die Nachricht mit einem Typ (feat, fix, docs usw.) beginnt, optional einen Bereich in Klammern enthält, gefolgt von einer kurzen Beschreibung.
  • Wenn die Commit-Nachricht nicht dem Muster entspricht, wird der Commit blockiert und eine Fehlermeldung ausgegeben.
  • Bei korrekter Nachricht wird der Commit normal fortgesetzt.

Dieses Hook-Skript sorgt dafür, dass alle Commit-Nachrichten einheitlich und standardisiert sind, was für eine bessere Nachverfolgbarkeit und Dokumentation im Projekt sorgt.

Vorteile von Git-Hooks

Git-Hooks bieten viele Vorteile, insbesondere in Teams und größeren Projekten:

  • Automatisierte Qualitätssicherung: Hooks wie der Pre-Commit Hook stellen sicher, dass nur getesteter und geprüfter Code in das Repository gelangt. Dies trägt maßgeblich zur Codequalität bei.
  • Konsistente Commit-Nachrichten: Durch die Nutzung eines commit-msg Hooks können Sie sicherstellen, dass alle Commit-Nachrichten einem vorgegebenen Format folgen, was die Nachverfolgbarkeit und Lesbarkeit verbessert.
  • Effizienterer Workflow: Post-Merge Hooks ermöglichen es, nach einem Merge automatisch Aufgaben wie das Löschen von Branches oder das Aktualisieren von Abhängigkeiten durchzuführen, was Zeit und manuelle Arbeit spart.

Fazit

Git-Hooks sind ein kraftvolles Werkzeug, das den Entwicklungsprozess erheblich verbessern kann. Durch die Automatisierung von Aufgaben wie Linting, Formatierung, Commit-Message-Validierung oder das Löschen von Branches tragen sie zur Qualitätssicherung und zur Effizienzsteigerung im Team bei.

In Node-Projekten können Git-Hooks einfach über die package.json konfiguriert und in den Workflow integriert werden. Der commit-msg Hook zur Sicherstellung eines standardisierten Commit-Formats ist nur ein Beispiel für die vielseitigen Einsatzmöglichkeiten von Git-Hooks. Sie helfen dabei, den Entwicklungsprozess sauber, konsistent und effizient zu gestalten.

Wie werden Sie die Möglichkeiten von Git-Hooks nutzen, um Ihren Workflow zu verbessern und unsaubere Commits zu vermeiden? Entdecken Sie die vielen Einsatzmöglichkeiten und steigern Sie die Qualität Ihrer Codebasis!

Zurück

Kontaktieren Sie uns

Wir melden uns schnellstmöglich, um Sie bei Ihrem Anliegen zu unterstützen.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.