Skip to main content

Git e Github

Tutoriais básicos de Git e Github:

Git flow e convenções

Através do git flow, podemos coordenar múltiplos esforços paralelamente através do recurso de commits e ramificações (branches) do git.

Commits

Cada commit é como se fosse um snapshot do código, ele é utilizado para trackear mudanças significativas feitas no código.

Por exemplo, suponhamos que um desenvolvedor chamado Lucas esteja trabalhando em uma nova feature, a estilização e funcionalidade da página de Login.

Conforme o Lucas esteja trabalhando nessa feature, é interessante que ele salve as alterações que funcionem em seu código.

Exemplo: Lucas começa a adicionar os elementos HTML como o <input /> e o <form></form>. Quando ele visualizar que os elementos HTML estão funcionando bem, ele deve fazer um commit da seguinte forma:

$ git commit -m "add: html form for login page"

Logo em seguida, Lucas começa a trabalhar na estilização, após finalizar o seu css, ele deve commitar novamente:

$ git commit -m "add: styling for html form in login page"

No final do dia, Lucas terminou seu trabalho, que era finalizar a página de Login. Desta forma ele pode criar uma nova Pull Request para ter seu trabalho fundido (merged) na ramificação (branch) de desenvolvimento principal da empresa.

OBS: Emojis não são necessários para os as mensagens do commit.

Semânticas da mensagem de um commit

Para manter a organização e facilitar o versionamento do código uma padronização para as mensagens de commit se torna necessária, com isso uma semântica para as mensagens de commit se torna crucial.

A mensagem de um commit deve ser estruturada da seguinte forma:

feat: add button component
^--^ ^------------^
| |
| +-> Resumo no tempo presente.
|
+-------> Tipo: chore, docs, feat, fix, refactor, style, or test.

Tipos:

  • feat: Novo recurso para o usuário
  • fix: Correção de bug para o usuário
  • docs: Mudanças na documentação
  • style: Formatação, falta de ponto e vírgula, etc; nenhuma alteração no código de produção
  • refactor: Refatoração de código de produção, por exemplo. renomear uma variável
  • test: Adição de testes ausentes, testes de refatoração; nenhuma mudança de código de produção
  • chore: Modificação que o usuário não irá ver, por exemplo ci/cd, config files, etc; nenhuma mudança de código de produção

Ramificações (Branches)

Git flow image representantion

No git flow, temos as principais branchs que são:

  • Main: branch de produção, contém código que está sendo executado em produção.
  • Hotfix: branch para consertos rápidos dos erros presentes na Main
  • Release: branch para versionamento do produto/serviço que está sendo desenvolvido, e que segue o padrão semver.
  • Develop: branch principal para incrementar features ao produto/serviço, que após ser estabilizado, é fundida com a branch Release.
  • Features: branch de desenvolvimento de novas features, para cada nova feature, uma nova branch desse tipo é criada.

Para nomear cada branch do tipo Feature, seguimos a convenção:

<tipo-da-branch>-<autor>-<feature_a_ser_desenvolvida>

# Exemplo

- dev-abehidek-mudar_cor_do_botão
- dev-vitormiura-criar_home_page

Vários autores em um commit

Para commitar com vários autores, basta colocar o seguinte texto logo abaixo da mensagem de commit

Fix: typo

In this commit I fixed a typo in the documentation.

Co-authored-by: AUTHOR-NAME <ANOTHER-NAME@EXAMPLE.COM>