The one-line summary: push into a remote repository that has a detached work tree, and a post-receive hook that runs
git checkout -f
.
Great how-to for putting a website under the control of git and avoiding some of the issues that can pop up when using git pull
from your server is not an option.