Verwalten Sie Git-Hooks einfach in Ihrer Composer-Konfiguration. Dieses Befehlszeilentool erleichtert die Implementierung einer konsistenten projektweiten Verwendung von Git-Hooks. Durch die Angabe von Hooks in der Composer-Datei werden diese für jedes Mitglied des Projektteams verfügbar. Dies sorgt für ein einheitliches Umfeld und Verhalten für alle, was großartig ist. Es ist auch möglich, Git-Hooks global für jedes Repository auf Ihrem Computer zu verwalten. Auf diese Weise haben Sie für jedes Projekt, an dem Sie arbeiten möchten, einen zuverlässigen Satz selbstgefertigter Haken.
Fügen Sie einen hooks
-Abschnitt zum extra
-Abschnitt Ihrer composer.json
-Datei hinzu und fügen Sie dort die Hooks hinzu.
{
"extra" : {
"hooks" : {
"pre-commit" : [
"echo committing as $(git config user.name)" ,
"php-cs-fixer fix ." // fix style
] ,
// verify commit message. ex: ABC-123: Fix everything
"commit-msg" : "grep -q '[A-Z]+-[0-9]+.*' $1" ,
"pre-push" : [
"php-cs-fixer fix --dry-run ." // check style
"phpunit"
] ,
"post-merge" : "composer install"
"..." : "..."
}
}
}
Dann mit installieren
composer require --dev brainmaestro/composer-git-hooks
Dadurch wird die cghooks
Binärdatei in Ihrem vendor/bin
-Ordner installiert. Wenn sich dieser Ordner nicht in Ihrem Pfad befindet, müssen Sie jedem Befehl vendor/bin/
voranstellen.
Hinweis: In den scripts
oder hooks
Stammabschnitten von composer.json
deklarierte Hooks werden in Version 3 nicht mehr unterstützt.
Sie können es auch global installieren. Dies fühlt sich viel natürlicher an, wenn cghooks
mit der neu hinzugefügten Unterstützung für die Verwaltung globaler Git-Hooks verwendet wird.
composer global require --dev brainmaestro/composer-git-hooks
Alle Befehle verfügen über globale Unterstützung (außer dem Testen der Hooks. Erfordert weiterhin die Anwesenheit im Verzeichnis mit der Datei composer.json
).
Wenn es sich bei einem Hook um eine Folge von Befehlen handelt, kann es sinnvoll sein, die Ausführung zu stoppen, wenn ein Befehl fehlschlägt.
Geben Sie die betroffenen Hooks im Konfigurationsabschnitt stop-on-failure
an.
{
"extra" : {
"hooks" : {
"config" : {
"stop-on-failure" : [ " pre-push " ]
},
"pre-push" : [
" php-cs-fixer fix --dry-run --stop-on-violation . " ,
" phpunit "
],
}
}
}
Stellen Sie sicher, dass Sie den Aktualisierungsbefehl immer ausführen, nachdem Sie den Konfigurationsabschnitt stop-on-failure
geändert haben.
Benutzerdefinierte Hooks können dem custom-hooks
-Array des Abschnitts „config“ hinzugefügt werden.
{
"extra" : {
"hooks" : {
"config" : {
"custom-hooks" : [ " pre-flow-feature-start " ]
},
"pre-flow-feature-start" : [
" echo 'Starting a new feature...' "
]
}
}
}
Stellen Sie sicher, dass Sie den Aktualisierungsbefehl immer ausführen, nachdem Sie den Konfigurationsabschnitt custom-hooks
geändert haben. Hinweis: config
ist kein gültiger benutzerdefinierter Hook-Wert.
Fügen Sie dem Abschnitt scripts
Ihrer Datei composer.json
ein cghooks
-Skript hinzu. Auf diese Weise können Befehle mit composer cghooks ${command}
ausgeführt werden. Dies ist ideal, wenn Sie Ihren Systempfad lieber nicht bearbeiten möchten.
{
"scripts" : {
"cghooks" : " vendor/bin/cghooks " ,
"..." : " ... "
}
}
Fügen Sie die folgenden Ereignisse zu Ihrer Datei composer.json
hinzu. Die cghooks
-Befehle werden jedes Mal ausgeführt, wenn die Ereignisse auftreten. Weitere Informationen zum Ereignissystem des Composer finden Sie unter Composer-Befehlsereignisse.
{
"scripts" : {
"post-install-cmd" : " cghooks add --ignore-lock " ,
"post-update-cmd" : " cghooks update " ,
"..." : " ... "
}
}
Alle folgenden Befehle müssen entweder im selben Ordner wie Ihre composer.json
-Datei ausgeführt werden oder indem Sie die Option --git-dir
angeben, um auf einen Ordner mit einer composer.json
-Datei zu verweisen.
Führen Sie nach Abschluss der Installation cghooks add
aus, um alle gültigen Git-Hooks hinzuzufügen, die in der Composer-Konfiguration angegeben wurden.
Option | Beschreibung | Befehl |
---|---|---|
no-lock | Erstellen Sie keine Sperrdatei | cghooks add --no-lock |
ignore-lock | Fügen Sie die Sperrdatei zu .gitignore hinzu | cghooks add --ignore-lock |
force-win | Windows-Bash-Kompatibilität erzwingen | cghooks add --force-win |
Die lock
enthält eine Liste aller hinzugefügten Hooks.
Wenn das Flag --global
verwendet wird, werden die Hooks global hinzugefügt und die globale Git-Konfiguration wird ebenfalls geändert. Wenn kein Verzeichnis angegeben ist, gibt es einen Fallback auf den aktuellen core.hooksPath
in der globalen Konfiguration. Wenn dieser Wert nicht festgelegt ist, wird standardmäßig $COMPOSER_HOME
verwendet (dieser spezielle Fallback tritt nur für den Befehl add
auf). Es schlägt mit einem Fehler fehl, wenn nach den Fallbacks immer noch kein Pfad vorhanden ist.
Der Update-Befehl, der mit cghooks update
ausgeführt wird, ignoriert grundsätzlich die Sperrdatei und versucht, Hooks aus der Composer-Datei hinzuzufügen. Dies ähnelt dem, was die Option --force
für den Befehl add
bewirkt hat. Dieser Befehl ist nützlich, wenn sich die Hooks in der Datei composer.json
seit dem ersten Hinzufügen der Hooks geändert haben.
Dies funktioniert ähnlich, wenn es mit --global
verwendet wird, außer dass es keinen Fallback auf $COMPOSER_HOME
gibt, wenn kein Verzeichnis angegeben wird.
Haken können mit cghooks remove
leicht entfernt werden. Dadurch werden alle Hooks entfernt, die in der Composer-Konfiguration angegeben wurden.
Hooks können auch entfernt werden, indem man sie als Argumente übergibt. Der Befehl cghooks remove pre-commit post-commit
entfernt die pre-commit
und post-commit
-Hooks.
Option | Beschreibung | Befehl |
---|---|---|
force | Löschen Sie Hooks, ohne die Sperrdatei zu überprüfen | cghooks remove --force |
ACHTUNG : Wenn die Sperrdatei manipuliert oder die Force-Option verwendet wurde, werden auch Hooks entfernt, die bereits vor der Verwendung dieses Pakets vorhanden waren, aber in der Composer-Skriptkonfiguration angegeben wurden. Das heißt, wenn Sie zuvor einen pre-commit
-Hook hatten, Ihre aktuelle Composer-Konfiguration aber auch über einen pre-commit
Hook verfügt, führt diese Option dazu, dass der Befehl Ihren anfänglichen Hook entfernt.
Es gibt auch keinen Fallback auf $COMPOSER_HOME
, wenn bei Verwendung mit --global
kein Verzeichnis angegeben wird.
Hooks können mit dem Befehl cghooks list-hooks
aufgelistet werden. Dies überprüft grundsätzlich die Composer-Konfiguration und listet die Hooks auf, die tatsächlich Dateien enthalten.
Die folgenden Optionen gelten für alle Befehle.
Option | Beschreibung | Befehl |
---|---|---|
git-dir | Pfad zum Git-Verzeichnis | cghooks ${command} --git-dir='/path/to/.git' |
lock-dir | Pfad zum Sperrdateiverzeichnis | cghooks ${command} --lock-dir='/path/to/lock' |
global | Führt den angegebenen Befehl global aus | cghooks ${command} --global |
Jeder Befehl verfügt außerdem über ein Flag -v
um die Ausführlichkeit für detailliertere Protokolle zu steuern. Derzeit wird nur eine Ebene unterstützt.
Hooks können mit cghooks ${hook}
getestet werden, bevor sie hinzugefügt werden. Beispiel cghooks pre-commit
führt den pre-commit
Hook aus.
Weitere Informationen finden Sie unter BEITRAGEN.
Die MIT-Lizenz (MIT). Weitere Informationen finden Sie in der Lizenzdatei.