Como fazer um "git push" atualizar arquivos no seu host?

13

Eu tenho alguns sites todos hospedados no mesmo serviço de hospedagem na hospedagem compartilhada. Meu host suporta o Git e eu tenho acesso SSH a ele, e também tenho a configuração do Git no meu laptop.

Eu quero fazer isso para que, quando eu fizer um "mestre de origem do git push", ele atualize automaticamente os arquivos no meu servidor da web e também salve um backup dos arquivos do commit anterior para que eu possa reverter facilmente, se quiser. Isso é possível?

Ryan
fonte
Curioso - quem é o seu provedor de hospedagem?
usuário
E por que você deseja um "backup dos arquivos de consolidação anteriores"? Você pode simplesmente enviar por push o commit anterior, se quiser reverter (supondo que você sempre saiba o que fez por último - mas deve saber disso de qualquer maneira).
sleske

Respostas:

12

Isso está resumido em Usando o Git para gerenciar um site

A chave do processo é o gancho do lado do servidor 'pós-recebimento' (mais sobre o git hooks em Personalizando o Git - Git Hooks e a página do manual do githooks ). Esse gancho é executado após o servidor receber todos os dados.

Depois que o servidor recebe os dados, ele executa git checkout -f A opção -f forçará um checkout na cabeça, mesmo se houver diferenças locais.

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f

Coloque isso no hooks/diretório como post-receivee executável. Obviamente, o caminho muda para onde você tem os arquivos do servidor da web (o uso deGIT_WORK_TREE define a variável de ambiente para que você não precise manipular arquivos de ponto e configurações de git no servidor).

Para reverter, deve-se marcar cada release (isso também pode ser feito como parte do gancho pós-confirmação). Ao marcar a versão, é possível identificar facilmente o local para reversão, embora isso provavelmente envolva o logon no servidor e o check-out dessa tag.


fonte
Deve-se notar que isso significa que você está usando o git como uma ferramenta de implantação, algo para o qual não se destina realmente. Pode funcionar, mas existem inúmeras limitações (necessidade de baixar todo o repositório, nenhuma maneira de chamar scripts ou gerenciar permissões de arquivo, nenhuma maneira de descompactar coisas ...). Provavelmente é melhor usar uma ferramenta de implantação adequada.
sleske
@sleske Você pode fazer tudo isso no post-receivegancho, que é realmente apenas um script onde você pode colocar o que quiser.
Mario
@ Mario: Sim, você pode - o que significa que está implementando efetivamente sua própria solução de implantação como um gancho pós-recebimento. Ainda há benefícios em usar uma solução existente, mas às vezes pode ser melhor que você mesmo ...
sleske
Você pode até fazer check-out em uma pasta intermediária e ter links da pasta da web para a pasta intermediária para evitar ter arquivos .git na sua pasta da web.
Bent
0

A maneira mais simples de atualizar a árvore de trabalho do repositório para o qual você está empurrando é configurando git config receive.denyCurrentBranch updateInstead no lado do receptor. Consulte https://git-scm.com/docs/git-config/#git-config-receivedenyCurrentBranch

A resposta de Ryan com ganchos de confirmação de postagem é melhor, pois permite fazer check-out em algum local diferente (você provavelmente não deseja ter o .git na sua pasta da web). Mas, nesse nível, pode ser uma boa ideia usar alguma ferramenta de implantação existente, como a sleske disse nos comentários.

Echsecutor
fonte