Git
Git-sidokrokar av klienter
Sök…
Introduktion
Liksom många andra versionskontrollsystem har Git ett sätt att avfyra anpassade skript när vissa viktiga åtgärder inträffar. Det finns två grupper av dessa krokar: klientsidan och serversidan. Hakar på klientsidan utlöses av operationer som åtagande och sammanslagning, medan krokar på serversidan körs på nätverksoperationer som att ta emot drivna åtaganden. Du kan använda dessa krokar av alla möjliga skäl.
Installera en krok
Krokarna lagras alla i underkatalogen för hooks
i Git-katalogen. I de flesta projekt är det .git/hooks
.
För att aktivera ett krokskript, lägger du en fil i underkatalogen för hooks
i din .git
katalog som heter lämpligt (utan någon förlängning) och är körbar.
Git pre-push krok
pre-push- skriptet kallas med git push
när det har kontrollerat fjärrstatus, men innan något har tryckts. Om detta skript avslutas med en status som inte är noll, kommer inget att tryckas.
Denna krok kallas med följande parametrar:
$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)
Information om de åtaganden som skjuts levereras som rader till standardinmatningen i formen:
<local_ref> <local_sha1> <remote_ref> <remote_sha1>
Provvärden:
local_ref = refs/heads/master
local_sha1 = 68a07ee4f6af8271dc40caae6cc23f283122ed11
remote_ref = refs/heads/master
remote_sha1 = efd4d512f34b11e3cf5c12433bbedd4b1532716f
Nedanför exemplet pre-push-skript togs från standard pre-push.sample som skapades automatiskt när ett nytt arkiv initialiseras med 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