Как организовать синхронизацию сайта с bare-репозиторием на сервере?
Только не пушит, а переходит в нужный каталог и делает оттуда 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
Ну, можно еще сверху навернуть создание виртуалхостов в апаче, или удаление удаляемых веток.
Проще всего это сделать через веб-запрос.
Напишите хуки, которые будут дергать url по заданному адресу, в самом сайте сделайте обработку этого запроса, чтобы делал git pull.
У вас ситуация, конечно, попроще - репозиторий и деплой на одной машине, но этот способ наиболее универсальный.
Да и на будущее пригодится, если будете делать автодеплой с битбакета, например. Там вам вручную хуки писать не дадут, зато у них есть готовый хук c http-запросом.