Yes, this is certainly possible.
Lets say I have a bare repository named /srv/production.git
on the destination system/server.
On the destination system I can use the command cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f
If I am in a non-bare repository the command is slightly different. Lets say I have a non-bare respository at /srv/testing
. To checkout that I would use cd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f
In fact on my system I even automate this in a post-commit hook in my production.git
repository. So when you push to production.git
the latest version is automatically check out to the web root.
#!/bin/sh # # An example hook script that is called after a successful # commit is made. # # To enable this hook, rename this file to "post-commit". GIT_WORK_TREE=/srv/production-www/ git checkout -f # ... misc other commands to verify permissions are set correctly.
If your only access to the remote system is webdav, it certainly should be possible to write a post-commit hook that will checkout to the webdav host, either directly or to a temporary location, which you can then script an upload.