Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Falha Nossa no Git (TOP 5)

Fiz aqui um TOP 5 das coisas mais estranhas que notei no Nosso repositório do ARDA.

Seguem os links dos repositórios:

Antigo: https://github.com/DXBrazil/Arda_old
Recente: https://github.com/DXBrazil/Arda

Bons desenvolvedores mantém o histórico do GIT linear e conciso usando um workflow definido (ex: gitflow), squash commit, rebase, etc. Nosso time é bom, mas ignoramos essas práticas e mantivemos todos os commits intermediários. Felizmente como o histórico ficou intacto, hoje é possível entender a história do ARDA em todos os detalhes, principalmente com os nossos erros.

Falha #5: Trabalhar sem feature branches

Por um tempo, mantivemos branches individuais por usuários e isso gerou um histórico visualmente não-linear:

Em nosso Projeto, não adotamos o rebase e sempre fizemos pontos de merge. Embora o rebase torne o histórico mais linear, a vantagem do merge é manter o histórico fiel aos commits realizados.

Apenas como brincadeira, peguei um screenshot do SourceTree e rotacionei a imagem, tornando o nosso histórico musicalmente mais interessante:

Que confusão! Hoje vejo que poderíamos ter feito um histórico mais limpo se tivéssemos adotado o workflow do Gitflow (ou semelhante) desde o princípio do projeto.

Falha #4: Guardar senhas dentro do repositório

O pior é que esse erro é muito comum nos projetos. No nosso caso, adicionamos o arquivo de secrets.json com informações de login no Redis, SQL Server e Azure Blob Storage.

Em seguida, tentamos remover as senhas com um commit “removido string de conexão do sql server”.

Esse commit também poderia ser renomeado para “hackers, aqui tem senha -- veja os detalhes do commit”. Embora as senhas sejam removidas dos arquivos, os commits são mantidos dentro do repositório do GIT e qualquer um que tenha acesso pode olhar o histórico do arquivo.

Lição: esse erro sempre vai acontecer e se repetir, então esteja preparado para definir um processo de reset de senhas nos ambientes de desenvolvimento, teste e produção.

Falha #3: Configurar incorretamente o GIT Client

Durante a instalação do cliente do Git, você configura um usuário e email para acessar o repositório. Se tiver máquinas diferentes, então deve repetir a configuração em todas as máquinas.

Falhamos nisso. Temos diversos emails registrados:

Fabricio Sanchez, por exemplo, usou várias configurações de email diferente:

Configurar usuário e email errado tem um impacto muito baixo, mas gerou uma estatística interessante: a contribuição do Fabricio Sanchez foi apagar 165 mil linhas do projeto contra 135 mil adicionadas! Ele destruiu mais do que criou (merece um prêmio hehe).

Obrigado Fabricio Sanchez por todos os seus deletes no projeto!

Mas suspeito que, pelo fato de configurar o usuário/email errado, fez com que suas adições fossem ignoradas.

No final, isso não tira o mérito dele em ser um grande contribuidor do projeto ARDA.

Falha #2: Erro no arquivo Git Ignore

Outro erro comum é esquecer de configurar o arquivo do Git Ignore (.gitignore) e incluir arquivos desnecessários no controle de versão. Entre os casos mais comuns estão os diretórios bin, out, obj, bower_components, node_modules.

O que há de errado em incluir as dependências do NodeJS (diretório node_modules)?

Simples: esse diretório tem 7302 arquivos que não precisam estar versionados no Git.

Mas por incrível que pareça, nosso time do ARDA não cometeu essa falha!!! O Visual Studio cria automaticamente o arquivo com as extensões a serem ignoradas e, por isso, o .gitignore estava correto desde o começo do projeto.

Entretanto, nós fizemos melhor: nosso estagiário (sempre ele!) adicionou o caminho do nosso projeto Arda.Main dentro do Git ignore.

Quando você faz isso, erros estranhos acontecem no projeto do Arda.Main:

  • Arquivo existentes: continuam “trackeados” pelo git e a atualização funciona
  • Arquivos novos: são ignorados pelo .gitignore e não são incluídos no projeto

Esse comportamento gerou erros aleatórios por um bom tempo. Determinadas modificações do Arda.Main funcionavam, outras não. Só fomos descobrir a causa do problema dias depois.

Falha #1: Falta de controle no master

Nossos repositórios (GitHub e VSTS) são protegidos por senha, mas qualquer um do time podia entrar no repositório e editar os arquivos. Pela descrição, dá para identificar algumas gambiarras. Por exemplo, commits correspondentes a Work in Progress (WIP) estão em vários lugares no histórico do Git.

Tem outros commits de “adjusting dockerfile again” ou “once again, trying to adjust the path” realizados direto na master.

Isso sem contar que usamos o repositório master para demonstrações no Tech Summit 2016.

A coisa fica feia quando aparece um root fazendo commit.

Até hoje não sei de onde veio esse commit, mas acho que foi alguém usando o VIM dentro de um Ubuntu para rodar os containers.

Entendo que diversas vezes usamos essa aplicação para demonstração em eventos. Entretanto, a nossa branch master ficou uma bagunça. Se esse projeto fosse crítico (mais crítico do que é atualmente), a gente deveria fazer Fork do repositório e trabalhar nele. Enfim, várias formas de organizar o acesso aos repositórios.

Conclusão

Seu time realmente sabe trabalhar com o Git?

No nosso caso, estamos (sempre) aprendendo…

E vocês? Compartilhem suas experiências ruins nos comentários - as boas experiências já conhecemos!

Share the post

Falha Nossa no Git (TOP 5)

×

Subscribe to Msdn Blogs | Get The Latest Information, Insights, Announcements, And News From Microsoft Experts And Developers In The Msdn Blogs.

Get updates delivered right to your inbox!

Thank you for your subscription

×