Git
Git Client-Side Hooks
Zoeken…
Invoering
Net als veel andere versiebeheersystemen, heeft Git een manier om aangepaste scripts af te vuren wanneer bepaalde belangrijke acties plaatsvinden. Er zijn twee groepen van deze hooks: client-side en server-side. Hooks aan clientzijde worden geactiveerd door bewerkingen zoals vastleggen en samenvoegen, terwijl hooks aan serverzijde worden uitgevoerd op netwerkbewerkingen zoals het ontvangen van push-commits. Je kunt deze haken om allerlei redenen gebruiken.
Een haak installeren
De hooks worden allemaal opgeslagen in de submap hooks
van de Git-directory. In de meeste projecten is dat .git/hooks
.
Om een hook-script in te schakelen, plaatst u een bestand in de hooks
submap van uw .git
map met de juiste naam (zonder enige extensie) en uitvoerbaar is.
Git pre-push haak
pre-push script wordt opgeroepen door git push
nadat het de externe status heeft gecontroleerd, maar voordat er iets is gepusht. Als dit script wordt afgesloten met een niet-nulstatus, wordt er niets gepusht.
Deze hook wordt met de volgende parameters aangeroepen:
$1 -- Name of the remote to which the push is being done (Ex: origin)
$2 -- URL to which the push is being done (Ex: https://<host>:<port>/<username>/<project_name>.git)
Informatie over de commits die worden geduwd, wordt als lijnen aan de standaardinvoer geleverd in de vorm:
<local_ref> <local_sha1> <remote_ref> <remote_sha1>
Voorbeeldwaarden:
local_ref = refs/heads/master
local_sha1 = 68a07ee4f6af8271dc40caae6cc23f283122ed11
remote_ref = refs/heads/master
remote_sha1 = efd4d512f34b11e3cf5c12433bbedd4b1532716f
Onderstaand voorbeeld pre-push script is overgenomen uit de standaard pre-push.sample die automatisch werd aangemaakt wanneer een nieuwe repository wordt geïnitialiseerd met git init
# This sample shows how to prevent push of commits where the log message starts
# with "WIP" (work in progress).
remote="$1"
url="$2"
z40=0000000000000000000000000000000000000000
while read local_ref local_sha remote_ref remote_sha
do
if [ "$local_sha" = $z40 ]
then
# Handle delete
:
else
if [ "$remote_sha" = $z40 ]
then
# New branch, examine all commits
range="$local_sha"
else
# Update to existing branch, examine new commits
range="$remote_sha..$local_sha"
fi
# Check for WIP commit
commit=`git rev-list -n 1 --grep '^WIP' "$range"`
if [ -n "$commit" ]
then
echo >&2 "Found WIP commit in $local_ref, not pushing"
exit 1
fi
fi
done
exit 0