Home Explore Blog CI



git

3rd chunk of `Documentation/git-receive-pack.adoc`
b614ded68c5ea5eb4868397edeaa848a713a48bc87f1ec580000000100000901
 0\{40} (meaning there is no such ref yet),
or it should match what is recorded in refname.

The hook should exit with non-zero status if it wants to disallow
updating the named ref.  Otherwise it should exit with zero.

Successful execution (a zero exit status) of this hook does not
ensure the ref will actually be updated, it is only a prerequisite.
As such it is not a good idea to send notices (e.g. email) from
this hook.  Consider using the post-receive hook instead.

POST-RECEIVE HOOK
-----------------
After all refs were updated (or attempted to be updated), if any
ref update was successful, and if $GIT_DIR/hooks/post-receive
file exists and is executable, it will be invoked once with no
parameters.  The standard input of the hook will be one line
for each successfully updated ref:

       sha1-old SP sha1-new SP refname LF

The refname value is relative to $GIT_DIR; e.g. for the master
head this is "refs/heads/master".  The two sha1 values before
each refname are the object names for the refname before and after
the update.  Refs that were created will have sha1-old equal to
0\{40}, while refs that were deleted will have sha1-new equal to
0\{40}, otherwise sha1-old and sha1-new should be valid objects in
the repository.

The `GIT_PUSH_CERT*` environment variables can be inspected, just as
in `pre-receive` hook, after accepting a signed push.

Using this hook, it is easy to generate mails describing the updates
to the repository.  This example script sends one mail message per
ref listing the commits pushed to the repository, and logs the push
certificates of signed pushes with good signatures to a logger
service:

----
#!/bin/sh
# mail out commit update information.
while read oval nval ref
do
	if expr "$oval" : '0*$' >/dev/null
	then
		echo "Created a new ref, with the following commits:"
		git rev-list --pretty "$nval"
	else
		echo "New commits:"
		git rev-list --pretty "$nval" "^$oval"
	fi |
	mail -s "Changes to ref $ref" commit-list@mydomain
done
# log signed push certificate, if any
if test -n "${GIT_PUSH_CERT-}" && test ${GIT_PUSH_CERT_STATUS} = G
then
	(
		echo expected nonce is ${GIT_PUSH_NONCE}
		git cat-file blob ${GIT_PUSH_CERT}
	) | mail -s "push certificate from $GIT_PUSH_CERT_SIGNER" push-log@mydomain
fi
exit 0
----

The exit code from this hook

Title: Git Post-Receive Hook
Summary
The post-receive hook is invoked after all refs have been updated, and is used to perform actions such as sending email notifications or logging updates, including information about signed pushes and their corresponding certificates.