Iago Frota

Desenvolvedor Web

Freelancer

Fotografo

Iago Frota

Desenvolvedor Web

Freelancer

Fotografo

Postagens

Deploy utilizando git bare

14 de abril de 2020 Git, Projeto pessoal
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.

Jon Saints – What is a bare git repository?


A bare repository created with git init --bare is for… sharing.

Jon Saints – What is a bare git repository?

Tutorial

Pré-requisito

  1. Ter o GIT instalado na sua máquina local
  2. Ter o GIT instalado na sua VPS
  3. Ter acesso a sua VPS via SSH

Criar o repositório bare no servidor de produção

Acesso o seu servidor via ssh

$ ssh [email protected]

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:

  1. pre-receive: é executado assim que recebe a mudança
  2. post-receive: é executado depois que é recebido a mudança
  3. 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 chamado post-receive e terá o seguinte conteúdo

#!/bin/bash

GIT_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 [email protected]:/home/iago/git-deploy/meu-projeto-sensacional

ou …

$ git remote add prod [email protected][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 ini 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 este artigo será útil também



Fontes

https://pt.stackoverflow.com/a/80188/31086

https://www.blopig.com/blog/2017/06/using-bare-git-repos/

http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/

https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

https://www.digitalocean.com/community/tutorials/how-to-use-git-hooks-to-automate-development-and-deployment-tasks

Taggs:
Write a comment

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.