Select Page

git-Hooks

by | Jun 18, 2013 | GitLab

Hook
Mit Hooks kann an verschiedenen Stellen in den git-Workflow eingegriffen werden. Auf Seiten des Clients gibt es zum Beispiel einen Hook, um Skripte direkt vor dem Commit abzusetzen. Auf der Seite des Servers können Hooks verwendet werden, um unsaubere Commits von Benutzern abzulehnen.
Ein git-Hook ist in der Regel ein Skript in beliebiger Sprache, welches ausführbar im Ordner hooks im git-Repository abgelegt wird (/.git/hooks bzw. /hooks). Anhand des Dateinamens wird bestimmt, wann das Skript zum Einsatz kommt. Die Datei pre-receive wird zum Beispiel ausgeführt, sobald ein push bei einem git-Repository ankommt. Parameter werden nicht als Argumente übergeben, sondern müssen vom STDIN eingelesen werden. Hier wird pro Zeile ein Triplet (alte Revision, neue Revision und Refname) übergeben. Hier ein kurzes Gerüst für einen pre-receive Hook:

#!/usr/bin/php

Mit den SHA-Hashes der Revisionen und verschiedenen git-Befehle können die gepushten Änderungen zerpflückt und gegebenenfalls abgelehnt werden, indem ein Wert ungleich 0 zurückgegeben wird. Fehlermeldungen können über den STDOUT an den Benutzer weitergegeben werden. Im Folgendem noch ein paar nützliche git-Befehle um an den Inhalt der Änderungen zu kommen.

  • git diff $oldrev $newrev
    • Zeigt alle gewünschten Änderungen an, welche zum Beispiel nach nicht erlaubten Strings durchsucht werden können.
  • git diff-tree -r $oldrev $newrev
    • Zeigt Dateien, die geändert werden, an.
  • git ls-tree -r $newrev
    • Gibt alle Dateien von $newrev zurück (inklusive dem <object>-Identifier).
  • git cat-file blob <object>
    • Gibt den Inhalt der Datei mit dem <object>-Identifier zurück. Der Inhalt kann an einen beliebigen Syntaxchecker übergeben werden.

Das Titelbild steht unter der PublicDomain Lizenz und wurde von WikimediaCommons zur Verfügung gestellt.

Achim Ledermüller
Achim Ledermüller
Senior Manager Cloud

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist er für den Betrieb und die Weiterentwicklung unserer Cloud-Plattform verantwortlich.

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

More posts on the topic GitLab

Wer GitLab sucht, wird bei NETWAYS fündig!

Als Softwareentwickler kommt man um eine Anwendung für eine Versionsverwaltung nicht herum. Mit GitLab haben wir für Euch ein extrem beliebtes und umfangreiches VCS (Version Control System) im Programm. Hiermit könnt Ihr agil und effizient an Euren Software- und...

Divide and Conquer – Verteilte Git-Konfiguration

In meinem zehnten Monat als Consultant bei NETWAYS angekommen, bin ich inzwischen gut in verschiedenste Kundenprojekte integriert. Das sorgt einerseits für einen abwechslungsreichen Alltag mit immer neuen Herausforderungen, andererseits stellte sich irgendwann ein...

HUGO: GitLab-CI/CD-Pipeline für eine statische Website

Vor etwa 4 Monaten habe ich hier einen Blogpost geschrieben, in dem ich Hugo vorgestellt habe - eine Software zum Generieren statischer Webseiten aus Markdown-Dateien. Im Lauf meiner Ausbildung zum Fachinformatiker für Systemintegration bei NETWAYS habe ich vor kurzem...

GitLab – Merge Requests

Merges werden verwendet, um den Code zwischen anderen Personen, die Sie an einem Projekt vorgenommen haben, auszutauschen und die Änderungen einfach miteinander zu konsolidieren. Schritt 1: Vor dem Erstellen einer neuen Merge sollte im GitLab ein Branch erstellt...