I have a git bare repository on my server which has a post-receive hook that essentially does
GIT_WORK_TREE=`/path/to/public_html` git checkout -f