Только не пушит, а переходит в нужный каталог и делает оттуда pull.
Например так:
branch=$(git rev-parse --symbolic --abbrev-ref $1)
if [ $(git rev-parse --is-bare-repository) = true ]
then
rep=$(basename "$PWD"|sed 's/.git//')
else
rep=$(basename $(readlink -nf "$PWD"/..|sed 's/.git//'))
fi
/home/scripts/git/post-update.sh $rep $branch
И в post-update.sh например так:
#!/bin/sh
DATADIR=/var/www/$1/$2
REPO=$1
BRANCH=$2
if [ ! -d $DATADIR ]
then
mkdir -p $DATADIR
git clone gituser@example.com:$REPO $DATADIR
cd $DATADIR
git checkout $BRANCH
else
cd $DATADIR
/usr/bin/git config user.email "deploy@local"
/usr/bin/git config user.name "Deploy Robot"
/usr/bin/git fetch origin
/usr/bin/git reset --hard origin/$BRANCH
/usr/bin/git stash
/usr/bin/git checkout
/usr/bin/git pull
fi
Ну, можно еще сверху навернуть создание виртуалхостов в апаче, или удаление удаляемых веток.