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 fiDica: Se os dois repos estiverem na mesma máquina, use
git clone --shared /path/to/barepara 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
.gitcom 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 ).