Skip to content

Instantly share code, notes, and snippets.

@AlyoshaS
Last active May 6, 2021 17:44
Show Gist options
  • Save AlyoshaS/b18c1b79f9d25df6314fb5220abe60bb to your computer and use it in GitHub Desktop.
Save AlyoshaS/b18c1b79f9d25df6314fb5220abe60bb to your computer and use it in GitHub Desktop.

Taller Onboarding: Git workflow

Esse é o onboarding do workflow de git aqui na Taller e decidimos deixar isso aberto para comunidade também porque são coisas que podem ajudar outras pessoas ou times :)

Seu primeiro passo é fazer as seguintes configurações:

1. Aqui todos nós usamos o Tig! Ele ajuda muito na visualização dos commits, branches, pegar hashs e mais um monte de coisas bacanas que vão te auxiliar no dia a dia. Confira a doc dele aqui e já configure no teu pc antes de iniciar sua primeira história do onboarding técnico.
Dúvida sobre a frequência de uso do tig

2. Configure seu email da taller no seu github, caso você for usar seu perfil pessoal. Tem um tutorial bacana nesse link.

3. Configure a autenticação de dois fatores na sua conta, a gente preza por segurança. Tem um tutorial bacana nesse link

Tudo configurado e organizado? Bora entender nosso fluxo e nossos padrões!

Em cada passo descrito nesse onboarding, o mais importante é você entender o que está fazendo e o motivo de fazer ele. Se algo não estiver claro, crie uma issue, abra um PR e nos ajude a melhorar o onboarding para as pessoas que entrarão depois de você.

Padrão do nome das branches

Tanto o nome das branches quanto as mensagens de commit deverão ser em inglês. Nossas branches sempre iniciarão com os tipos de histórias descritos abaixo.

Tipo Descrição
fs História que adiciona uma nova feature ao projeto
hotfix História para resolver bugs no projeto
chore História que adiciona melhorias em configurações do projeto ou do ambiente

Para ficar melhor de entender como nomear nossas branches, bora criar três histórias fictícias:

Primeira história: Uma feature, no qual a sigla do projeto no Jira é AT, o número da história é 1052 e o título é "Permitir que os usuários possam deslogar do app"

Segunda história: Um hotfix, no qual a sigla do projeto no Jira é PD, o número da história é 2043 e o título é "Corrigir mensagem de e-mail já existente"

Terceira história: Uma chore, no qual a sigla do projeto no Jira é EF(histórias de eficiência para nosso time a sigla do projeto é EF), o número da história é 105 e o título é "Atualizar os scripts de deploy do boilerplate de drupal"

Quais são os nomes de branch desejáveis para essas histórias?

Tipo Sigla do projeto número Dois traços Descrição curta
fs AT 1052 -- user-logout
hotfix PD 2043 -- email-error-message
chore EF 105 -- update-deploy-scripts

Para criar uma branch, com a branch main atualizada com o origin do projeto, use o seguinte comando trocando as variáveis dentro de placeholders(${placeholder}):

git checkout -b fs/${sigla do projeto}-${número da história}--${descrição-curta}

Padrão das mensagens de commit

Nós presamos por um changelog fácil de ler e entender o que aconteceu no passado, então hoje adotamos algumas regrinhas que nos ajuda a manter isso, e nas nossas pesquisas encontramos o padrão de Semantic Commit Messages proposto pelo Karma e também vimos esse artigo que inspirou muito nossos padrões e também é uma das nossas bases hoje.

Então todas as mensagens de commit devem seguir o seguinte padrão:

categoria: Verbo e descrição no presente.

Os tipos são: feat, fix, docs, style, refactor, test e chore. Já os verbos mais usados hoje são: update, add, remove, improve, mas você não precisa se limitar a isso. Uma dica é você baixar um dos nossos projetos ativos, e usar o tig para ler uma parte do histórico dos commits e ver os padrões "na prática".

Exemplo e explicação é tudo nessa vida, né? Aqui embaixo você terá mais detalhes sobre ao se refere cada categoria de commit citado anteriormente.

Tipo Descrição Exemplo:
feat: Implementação de alguma novidade: Uma feature, funcionalidade, tela, opção de ação, etc. feat: add node cachetag to ensure content invalidation
fix: Implementação em que a única finalidade é corrigir algum comportamento errôneo do sistema. fix: improve url object verification
docs: Alterações ou incrementos na documentação do projeto. docs: add instructions to force new drupal installation
style: Para alterar identação, vírgulas(retirar ou colocar), etc. Um exemplo é se você está adicionando o prettier ao projeto. Pense nele como estilo de código e não como CSS. style: convert tabs to spaces
refactor: Refatoração/melhoria de código sem alterar funcionalidade. refactor: extract data provider method
test: Refatoração ou adição de testes. Apenas testes. test: update test to add scenario for columnist article
chore: Alterações em arquivos de configuração do projeto ou do ambiente. Logs, pacotes, dependências e etc. chore: add scripts to deploy on vercel

Caso você queira já deixar configurado na sua máquina, existe a git-semantic-commits que já faz a magia da mensagem do commit pra ti. Essa lib é escolha sua usar ou não, o importante é você seguir os nossos padrões.

Workflow

Atualizando a branch main

A fonte da verdade é a branch main. Todas as branchs devem ser criadas a partir da main e deverão ser mergeadas na main através de um pull request.

Quando você estiver desenvolvendo, certifique-se que sua branch main local esteja atualizada com o origin executando:

git remote update
git reset --hard origin/main

git remote update: esse comando pega todas as atualizações do origin(desde a branch que você está até as outras branchs do projeto), mas não fara o merge das alterações em sua branch local.

git reset --hard origin/main: esse comando reseta tua branch local com a origin. Ou seja, tua branch local ficará idêntica ao origin.

Se voce estiver se perguntando "o que é essa porra de origin que tanto falam aqui?", o origin é um termo default que o git usa para se referir ao repositório(remote) de onde você clonou o projeto(seja ele github, gitlab ou bitbucket). Você pode mudar esse nome default, mas não há necessidade. Você pode acessar a documentação oficial para ter mais detalhes.

Criar uma nova branch

Atualize sua branch main conforme explicamos no ítem acima e execute o comando git checkout -b + o nome da branch(com o padrão explicado na sessão Padrão do nome das branches)

git checkout -b ${tipo da branch}/${sigla da história-número da história}--${descrição da issue ou história}

Em desenvolvimento

⚠️ INFORMAÇÃO IMPORTANTE: a branch que você estiver trabalhando deve SEMPRE estar atualizada com a main, para isso usamos o rebase. É sempre bom você ir fazendo rebase durante durante o desenvolvimento, porque se você deixar pra hora de entregar, existe a possibilidade de você passar muito tempo resolvendo conflito.

Para fazer rebase da main, execute:

git remote update
git rebase origin/main

Fique atento porque você não vai conseguir fazer rebase se não tiver commitado ou usado um git stash no que você estava trabalhando.

Terminou sua história?

Abra um pull request para a main e solicite o code review de duas pessoas do time.


⚠️ AVISO: Nunca faça push de commits diretamente na branch main. Seu código só vai pra main depois do pull request, code review e homologação.

imagem com a frase: proibido push de commits diretamente na branch main na frente das crianças, sujeito a paulada

é meme(zoeira), ninguém vai te bater ou dar pauladas.

Terminou sua história, code review feito, alterações ok é hora de enviar sua história para stage.

Enviar seu código Stage

Nessa etapa temos duas formas de fazer a mesma coisa:

Primeira: Crie uma branch auxiliar para poder fazer rebase com stage nela. Você sairá da sua branch atual:

git checkout -b fs/my-branch--STG

git remote update
git rebase origin/stage

*** resolve conflitos ***

git checkout stage
git reset --hard origin/stage
git merge fs/my-branch--STG
  • Antes do push, você sempre vai se fazer as seguintes perguntas: meu merge foi fast-forward? olhando no tig, alterei algo criando 'bifurcações'?
~ 😢 😢 😩 😢 😢 ~ ~ 😊 😊 😍 😊 😊 ~
tig feio tig daora
  • tudo ok? Então agora dale!
git push origin stage

História homologada, tudo certo e é hora de mandar pra main! Como falamos lá em cima, a ideia é que tua branch esteja sempre atualizada com o origin/main, então você volta pra sua branch e:

  • Faz o rebase de main pra ficar tudo atualizado
git remote update
git rebase origin/main
*** resolve conflitos ***
  • Vai pra main e atualiza main com a origin
git checkout main
git remote update
git reset --hard origin/main
  • Adiciona seus commits na main com o merge da sua branch:
git merge my-branch

*** verifica se seu merge foi fast-forward, olha no tig se tá tudo certo  e dale ***

git push origin main

Criando seu projeto do Onboarding Técnico

  • no canal #projetos fazer o subscribe do seu repositório no bot do github
/github subscribe https://github.com/taller-onboarding/onboarding-{seu nome} issues pulls deployments statuses public releases comments reviews
@AlyoshaS
Copy link
Author

AlyoshaS commented Apr 17, 2021

  • code review sem ser um cuzão
  • artigos sobre rebase
  • dicas para resolver conflitos

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment