To see the result of a commit I've to clone the repository each time.
Não é necessário clonar novamente, apenas git pull
das alterações mais recentes de cada vez.
Para fazer isso automaticamente, basta adicionar os comandos corretos ao gancho <barerepo>/hooks/post-update
em seu repositório bare.
-
O método A, website é um clone completo do repositório principal:
#!/bin/sh git update-server-info if dir=$(git config hooks.checkoutTo); then for ref; do if [ "$ref" = "refs/heads/master" ]; then (unset GIT_DIR && cd "$dir" && git pull --quiet --ff-only) fi done fi
Dica: Se os dois repos estiverem na mesma máquina, use
git clone --shared /path/to/bare
para economizar espaço reutilizando o diretório de objetos do repositório nu.Observação: há possíveis problemas de segurança com o método A - um estranho pode simplesmente fazer o download do diretório
.git
com o código-fonte do seu site, caso você não o mova para outro local. -
Método B, o site é apenas um checkout:
#!/bin/sh git update-server-info if dir=$(git config hooks.checkoutTo); then for ref; do if [ "$ref" = "refs/heads/master" ]; then # Must give a path (such as ".") to avoid switching HEAD. git --work-tree="$dir" checkout -f "$ref" -- . fi done fi
Para os dois ganchos, execute git config hooks.checkoutTo /var/www
dentro do repositório nulo (ou edite manualmente o arquivo <barerepo>/config
) para definir o caminho de destino.
Ambos os ganchos são escritos para serem ativados somente quando a ramificação master
é atualizada.
Verifique se o arquivo de gancho é executável ( chmod +x
). Veja githooks (5) para detalhes.
Nota: Tecnicamente, você pode empurrar para um repositório não-nu - o Git simplesmente rejeitará o envio para o ramo atualmente em check-out (pressionar para outros ramos está correto). Mesmo essa verificação pode ser desabilitada, mas é apenas um convite para problemas ... Também é muito mais limpo e melhor para os backups manterem os repositórios nus em um único diretório (por exemplo, ~/srv/git
ou ~/Public/Git
).