Sim, isso é certamente possível.
Digamos que eu tenha um repositório simples chamado /srv/production.git
no sistema / servidor de destino.
No sistema de destino, posso usar o comando cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f
Se eu estiver em um repositório não nu, o comando é um pouco diferente. Vamos dizer que eu tenho um repositório não vazio em /srv/testing
. Para verificar se usaria cd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f
Na verdade, no meu sistema, eu até automatizo isso em um gancho post-commit no repositório production.git
. Portanto, quando você enviar para production.git
, a versão mais recente será automaticamente verificada para a raiz da Web.
#!/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.
Se o seu único acesso ao sistema remoto for webdav, certamente será possível escrever um post-commit hook que fará o check-out para o host do webdav, diretamente ou em um local temporário, o qual você poderá fazer um upload de script.