$30 off During Our Annual Pro Sale. View Details »

Criando Commits Incríveis no Git

Criando Commits Incríveis no Git

O Git é uma ferramenta onipresente no desenvolvimento de software. Ele é utilizado em diversos ecossistemas e é crucial para o trabalho em equipe. Contudo, nem sempre ele é bem utilizado. O desconhecimento da ferramenta e/ou a falta de padrões definidos pela equipe podem torná-la apenas um obstáculo no processo de entrega de software. O objetivo dessa palestra é abrir os seus olhos para o quão incrível é o Git, te guiar para criar commits incríveis e transformá-lo num aliado para o trabalho em equipe. Você verá a importância de criar commits atômicos, testáveis e com uma mensagem descritiva seguindo o padrão conventional commits.

Marcel dos Santos

December 01, 2024
Tweet

More Decks by Marcel dos Santos

Other Decks in Programming

Transcript

  1. Interaja nas mídias sociais! - fale sobre o evento, palestrantes

    e conteúdo - tire fotos do evento e publique - interaja com outros participantes do evento - tire dúvidas ou dê feedbacks para os palestrantes
  2. "Git is fundamentally a c on tent-addressable filesystem with a

    VCS us er int er face wri tt en on t op of it." - Pro Git B oo k
  3. “o Git é, fundamentalmente, um sistema de ar quivos end

    er eçável p or c on teúdo c om uma int er face de usuário de c on trol e de v er são c on s tr uída sobre ele." - Livro Pro Git
  4. um sistema de arquivo endereçável por conteúdo é, de forma

    simples, um armazém de dados do tipo chave-valor
  5. pode-se adicionar qualquer tipo de conteúdo em um repositório Git

    e ele devolverá uma chave única para poder recuperá-lo
  6. - rw - r - - r - - 1

    marcel staff 64B Nov 13 17 : 28 COMMIT_EDITMSG - rw - r - - r - - @ 1 marcel staff 31K Nov 14 19 : 41 FETCH_HEAD - rw - r - - r - - 1 marcel staff 53B Nov 13 17 : 25 HEAD - rw - r - - r - - 1 marcel staff 41B Nov 13 17 : 23 ORIG_HEAD - rw - r - - r - - 1 marcel staff 440B Nov 8 01 : 37 conf i g - rw - r - - r - - 1 marcel staff 73B Jul 30 2021 description drwxr - xr - x 15 marcel staff 480B Nov 3 21 : 09 hooks - rw - r - - r - - 1 marcel staff 306K Nov 13 17 : 28 index drwxr - xr - x 4 marcel staff 128B Sep 23 18 : 20 info drwxr - xr - x 4 marcel staff 128B Sep 23 18 : 20 logs drwxr - xr - x 260 marcel staff 8.1K Nov 14 19 : 41 objects - rw - r - - r - - 1 marcel staff 58K Nov 13 17 : 37 packed - refs drwxr - xr - x 5 marcel staff 160B Sep 23 18 : 20 refs
  7. - rw - r - - r - - 1

    marcel staff 64B Nov 13 17 : 28 COMMIT_EDITMSG - rw - r - - r - - @ 1 marcel staff 31K Nov 14 19 : 41 FETCH_HEAD - rw - r - - r - - 1 marcel staff 53B Nov 13 17 : 25 HEAD - rw - r - - r - - 1 marcel staff 41B Nov 13 17 : 23 ORIG_HEAD - rw - r - - r - - 1 marcel staff 440B Nov 8 01 : 37 conf i g - rw - r - - r - - 1 marcel staff 73B Jul 30 2021 description drwxr - xr - x 15 marcel staff 480B Nov 3 21 : 09 hooks - rw - r - - r - - 1 marcel staff 306K Nov 13 17 : 28 index drwxr - xr - x 4 marcel staff 128B Sep 23 18 : 20 info drwxr - xr - x 4 marcel staff 128B Sep 23 18 : 20 logs drwxr - xr - x 260 marcel staff 8.1K Nov 14 19 : 41 objects - rw - r - - r - - 1 marcel staff 58K Nov 13 17 : 37 packed - refs drwxr - xr - x 5 marcel staff 160B Sep 23 18 : 20 refs
  8. $ f i nd .git/objects .git/objects .git/objects/a3 .git/objects/a3/968e52c871c470f1892e2feb240fb32f9cfb80 .git/objects/pack .git/objects/info

    .git/objects/e6 .git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 .git/objects/f9 .git/objects/f9/3e3a1a1525fb5b91020da86e44810c87a2d7bc
  9. $ f i nd .git/objects .git/objects .git/objects/a3 .git/objects/a3/968e52c871c470f1892e2feb240fb32f9cfb80 .git/objects/pack .git/objects/info

    .git/objects/e6 .git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 .git/objects/f9 .git/objects/f9/3e3a1a1525fb5b91020da86e44810c87a2d7bc
  10. $ f i nd .git/objects .git/objects .git/objects/a3 .git/objects/a3/968e52c871c470f1892e2feb240fb32f9cfb80 .git/objects/pack .git/objects/info

    .git/objects/e6 .git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 .git/objects/f9 .git/objects/f9/3e3a1a1525fb5b91020da86e44810c87a2d7bc
  11. uma tree é um objeto que possui uma ou mais

    entradas que apontam para blobs e trees e também é endereçável por um hash
  12. cada entrada de uma tree é composta por: 1. modo

    de acesso, 2. tipo do objeto (blob ou tree), 3. hash do objeto e 4. nome do arquivo
  13. $ f i nd .git/objects .git/objects .git/objects/a3 .git/objects/a3/968e52c871c470f1892e2feb240fb32f9cfb80 .git/objects/pack .git/objects/info

    .git/objects/e6 .git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 .git/objects/f9 .git/objects/f9/3e3a1a1525fb5b91020da86e44810c87a2d7bc
  14. uma tree representa uma fotogra fi a do repositório em

    determinado momento no tempo sem algumas informações
  15. um commit é um objeto que aponta para uma tree

    e possui informações relevantes como autor e mensagem de commit
  16. um commit aponta para uma tree (fotogra fi a do

    repositório) e para o commit pai (se houver)…
  17. …e contém informações relevante como nome e e-mail do autor

    ou committer e data, hora e mensagem de commit
  18. $ f i nd .git/objects .git/objects .git/objects/a3 .git/objects/a3/968e52c871c470f1892e2feb240fb32f9cfb80 .git/objects/pack .git/objects/info

    .git/objects/e6 .git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 .git/objects/f9 .git/objects/f9/3e3a1a1525fb5b91020da86e44810c87a2d7bc
  19. ele pode ser considerado uma fotogra fi a do repositório

    com informações relevantes em um determinado momento no tempo
  20. $ git commit - m "cria rota de cadastro do

    usuário" $ git commit - m “cria migrations da tabela”
  21. $ git commit # no editor padrão Cria rota de

    cadastro do usuário Resolves: ISSUE-75
  22. um commit atômico quase sempre é resultado de uma de

    fi nição adequada de tarefas ou histórias na etapa de re fi namento
  23. você pode, tranquilamente, ter commits com trabalhos incompletos já que

    não se trata da versão fi nal de seu trabalho
  24. no fi nal, deve-se consolidar todos os commits em apenas

    um commit que representa a entrega da funcionalidade
  25. rode ferramentas de qualidade de código como testes automatizados, estilo

    de código, linters, type checking entre outras análises
  26. o Git é uma ferramenta de documentação e o seu

    histórico permite ver a evolução do software ao longo do tempo
  27. o sucesso de um projeto de longo prazo é graças

    a sua manutenibilidade e o histórico de commits é essencial para isso
  28. se está com di fi culdade para resumir o que

    foi feito, o commit pode ter muita responsabilidade
  29. ela fornece um conjunto de regras fácil para criar um

    histórico de commit explícito…
  30. a convenção está de acordo com o semantic versioning ao

    descrever features, fixes e breaking changes na mensagem de commit
  31. o tipo fi x indica a correção de um bug

    na sua base de código e é equivalente ao patch no semantic versioning
  32. o tipo feat indica a introdução de uma nova funcionalidade

    na sua base de código e é equivalente ao minor no semantic versioning
  33. um commit pode ser do tipo breaking change e, para

    isso, deve-se adicionar um rodapé com breaking change: ou adicionar ! depois do tipo ou escopo do commit
  34. existem outros tipos além de fi x e feat que

    são permitidos como build, chore, docs e refactor
  35. a especi fi cação Conventional Commit é inspirada e baseada

    fortemente no Angular Commit Guidelines
  36. não é necessário seguir fi elmente as sete regras ou

    conventional commits mas elas são consolidadas na comunidade
  37. pode-se utilizar ferramentas de lint como o commitlint que veri

    fi ca se a mensagem está de acordo com padrão
  38. o Git é também uma ferramenta de documentação e o

    seu histórico permite ver a evolução do software ao longo do tempo
  39. e um bom histórico depende de commits atômicos, com testes

    e em um estado estável e de mensagens de commits bem escritas
  40. o sucesso de um projeto de longo prazo é graças

    a sua manutenibilidade e o histórico de commits é uma ferramenta essencial