# Git hooks in gitea

**URL:** https://forum.gitea.com/t/git-hooks-in-gitea/552
**Category:** Install/Maintain/Configure
**Created:** [September 6, 2018, 10:34am UTC](https://forum.gitea.com/t/git-hooks-in-gitea/552 "2018-09-06T10:34:46Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![omgit](https://avatars.discourse-cdn.com/v4/letter/o/7bcc69/32.png) [@omgit](https://forum.gitea.com/u/omgit)
#### Post date: [September 6, 2018, 10:34am UTC](https://forum.gitea.com/t/git-hooks-in-gitea/552/1 "2018-09-06T10:34:46Z")

</div>

I have installed gitea successfully and can push the code to the gitea respositories using SSL… NOw when I check the git hooks content… I have these options:

1. Pre-receive
2. Update
3. Post -receive

For 1 and 2, the content is already defined and for the third one it shows blank…  
Can any one help me in this regard… I am using the latest version of gitea

## Content of “Pre-receive”

#!/bin/sh

# 

# An example hook script to make use of push options.

# The example simply echoes all push options that start with ‘echoback=’

# and rejects all pushes when the “reject” push option is used.

# 

# To enable this hook, rename this file to “pre-receive”.

if test -n “$GIT\_PUSH\_OPTION\_COUNT”  
then  
i=0  
while test “$i” -lt “$GIT\_PUSH\_OPTION\_COUNT”  
do  
eval “value=$GIT\_PUSH\_OPTION\_$i”  
case “value" in echoback=\*) echo "echo from the pre-receive-hook: {value#\*=}” \>&2  
;;  
reject)  
exit 1  
esac  
i=$((i + 1))  
done  
fi

## content of Update

#!/bin/sh

# 

# An example hook script to block unannotated tags from entering.

# Called by “git receive-pack” with arguments: refname sha1-old sha1-new

# 

# To enable this hook, rename this file to “update”.

# 

# Config

# ------

# hooks.allowunannotated

# This boolean sets whether unannotated tags will be allowed into the

# repository. By default they won’t be.

# hooks.allowdeletetag

# This boolean sets whether deleting tags will be allowed in the

# repository. By default they won’t be.

# hooks.allowmodifytag

# This boolean sets whether a tag may be modified after creation. By default

# it won’t be.

# hooks.allowdeletebranch

# This boolean sets whether deleting branches will be allowed in the

# repository. By default they won’t be.

# hooks.denycreatebranch

# This boolean sets whether remotely creating branches will be denied

# in the repository. By default this is allowed.

# 

# — Command line

refname="$1"  
oldrev="$2"  
newrev="$3"

# — Safety check

if [-z “$GIT\_DIR”]; then  
echo “Don’t run this script from the command line.” \>&2  
echo " (if you want, you could supply GIT\_DIR then run" \>&2  
echo " $0 )" \>&2  
exit 1  
fi

if [-z “$refname” -o -z “$oldrev” -o -z “$newrev”]; then  
echo "usage: $0 " \>&2  
exit 1  
fi

# — Config

allowunannotated=(git config --bool hooks.allowunannotated) allowdeletebranch=(git config --bool hooks.allowdeletebranch)  
denycreatebranch=(git config --bool hooks.denycreatebranch) allowdeletetag=(git config --bool hooks.allowdeletetag)  
allowmodifytag=$(git config --bool hooks.allowmodifytag)

# check for no description

projectdesc=$(sed -e ‘1q’ “$GIT\_DIR/description”)  
case “$projectdesc” in  
“Unnamed repository”\* | “”)  
echo “\*\*\* Project description file hasn’t been set” \>&2  
exit 1  
;;  
esac

# — Check types

# if $newrev is 0000…0000, it’s a commit to delete a ref.

zero=“0000000000000000000000000000000000000000”  
if [“$newrev” = "zero"]; then newrev\_type=delete else newrev\_type=(git cat-file -t $newrev)  
fi

case “$refname”,"newrev\_type" in refs/tags/\*,commit) # un-annotated tag short\_refname={refname##refs/tags/}  
if [“$allowunannotated” != “true”]; then  
echo “\*\*\* The un-annotated tag, $short\_refname, is not allowed in this repository” \>&2  
echo “\*\*\* Use ‘git tag [-a | -s]’ for tags you want to propagate.” \>&2  
exit 1  
fi  
;;  
refs/tags/_,delete)  
# delete tag  
if [“$allowdeletetag” != “true”]; then  
echo "_\*\* Deleting a tag is not allowed in this repository" \>&2  
exit 1  
fi  
;;  
refs/tags/_,tag)  
# annotated tag  
if [“$allowmodifytag” != “true”] && git rev-parse $refname \> /dev/null 2\>&1  
then  
echo "_\*\* Tag ‘$refname’ already exists." \>&2  
echo “\*\*\* Modifying a tag is not allowed in this repository.” \>&2  
exit 1  
fi  
;;  
refs/heads/_,commit)  
# branch  
if [“$oldrev” = “$zero” -a “$denycreatebranch” = “true”]; then  
echo "_\*\* Creating a branch is not allowed in this repository" \>&2  
exit 1  
fi  
;;  
refs/heads/_,delete)  
# delete branch  
if [“$allowdeletebranch” != “true”]; then  
echo "_\*\* Deleting a branch is not allowed in this repository" \>&2  
exit 1  
fi  
;;  
refs/remotes/_,commit)  
# tracking branch  
;;  
refs/remotes/_,delete)  
# delete tracking branch  
if [“$allowdeletebranch” != “true”]; then  
echo “\*\*\* Deleting a tracking branch is not allowed in this repository” \>&2  
exit 1  
fi  
;;  
_)  
# Anything else (is there anything else?)  
echo "_\*\* Update hook: unknown type of update to ref $refname of type $newrev\_type" \>&2  
exit 1  
;;  
esac

# — Finished

exit 0

FINALLY SHOULD I NEED TO SET THE “WEBHOOKS” ALSO OR SETTING GIT HOOKS SOLVE MY PURPOSE…
