Deploy utilizando git bare
Já faz um tempo que estou achando muito interessante e útil automatizar certas ações repetitivas que eu tomo no meu dia a dia, como, por exemplo, dar deploy nas aplicações que fiz e sou responsável tanto no meu trabalho como em meus projetos pessoais.
Introdução
Basicamente, um repositório criado com o comando git init --bare
, irá criar um repositório sem os commits ou histórico de commits. Outro ponto, interessante é que você só envia os seus commits para esse repositório.
Irei citar um trecho muito esclarecedor
Well, a working repository created with
git init
is for… working.A bare repository created with
git init --bare
is for… sharing.
Criar o repositório bare no servidor de produção
Acesso o seu servidor via ssh
$ ssh iago@server.com
Acessado com sucesso, vamos criar a pasta e inicializar o repositório bare:
$ mkdir ~/git-deploy/meu-projeto-sensacional
Com esse comando, criei a pasta git-deploy
que irá abrigar os outros repositórios e criei o a pasta meu-projeto-sensacional
, que será meu repositório bare.
Dentro da pasta meu-repositorio-sensacional, dê o seguinte comando
$ git init --bare
Se você listar os itens desta pasta, verá algo parecido com isso
Hooks
De maneira bem sucinta, os hooks seriam gatilhos que disparam ações. Na pasta hooks, você verá vários scripts de exemplo. Os mais comuns, são:
- pre-receive: é executado assim que recebe a mudança
- post-receive: é executado depois que é recebido a mudança
- update: é muito parecido com o 1. pre-receive, mas só é executado uma vez
Esse artigo explica os outros scripts. Vale a pena dar uma lida.
Para o nosso caso, iremos criar um arquivo dentro da pasta hooks
chamado post-receive
e terá o seguinte conteúdo
#!/bin/bashGIT_WORK_TREE=/var/www/html/meu-projeto-sensacional git checkout -f
O valor da variável GIT_WORK_TREE
, é o caminho do seu projeto em produção
Salve e feche o arquivo.
Agora, precisamos dar permissão de execução desse script
$ chmod +x post-receive
Adicionar o repositório remoto localmente
Entre no seu repositório local e adicione um novo repositório remoto
$ git remote add prod iago@servidor.com.br:/home/iago/git-deploy/meu-projeto-sensacional
ou …
$ git remote add prod iago@[ip do servidor]:/home/iago/git-deploy/meu-projeto-sensacional
Você poder dar o nome que quiser para o remoto.
Enfim, para enviar os seu trabalho para o repositório bare, faça um push no remoto prod
$ git push prod
Conclusão
Enfim, eu utilizo repositório criados com o comando git init
na minha máquina para desenvolver, fazer merge ou rebase e consultar diff.
Já para projetos em produção, utilizo repositórios criados com o comando git init --bare
, pois não irei precisar trabalhar diretamente nesse repositório. Lá, só existe o trabalho "final".
Utilizo repositório criados com o comando git init na minha máquina para desenvolver, fazer merge ou rebase e consultar diff — Sobre repositórios simples
Lá, só existe o trabalho “final” — Sobre repositórios bare
Espero sinceramente que o conteúdo deste artigo seja útil para você, assim como foi e está sendo para mim.
Acredito que irá achar interessante entender como funciona os estágios do GIT.