Abílio Azevedo.

Git (Global Information Tracker) - Versionamento

Cover Image for Git (Global Information Tracker) - Versionamento
Abílio Azevedo
Abílio Azevedo

Git - Um Sistema de Controle de Versão Distribuído

O Git é um sistema de controle de versão distribuído que foi criado por Linus Torvalds em 2005 para o desenvolvimento do kernel Linux. O Git controla alterações feitas em uma base de código ao longo do tempo e permite que vários desenvolvedores trabalhem na mesma base de código simultaneamente.

Como o Git funciona

O Git funciona registrando alterações em uma base de código como commits. Cada commit captura um snapshot dos arquivos e diretórios em um determinado momento. O Git armazena essas informações em um banco de dados local na máquina do desenvolvedor. Os desenvolvedores podem então fazer push e pull de commits de e para repositórios remotos para compartilhar alterações e sincronizar sua base de código local com outros.

Principais recursos do Git:

  • Distribuído - Os desenvolvedores têm uma cópia completa do repositório Git e os commits são armazenados localmente. Isso permite trabalhar offline e sem depender de um servidor central.

  • Ramificação e mesclagem - Branches isolam o trabalho e alterações podem ser mescladas entre branches. Isso suporta o desenvolvimento concorrente.

  • Integridade - O Git controla checksums de conteúdos de arquivos e estruturas de diretórios para garantir integridade e evitar corrupção de dados.

  • Controle de histórico - O Git controla todas as alterações no histórico de um projeto, permitindo revisitar qualquer versão.

Usando o Git

Alguns comandos e fluxos de trabalho comuns do Git incluem:

  • git clone - Clona/copia um repositório remoto para sua máquina local

  • git add - Prepara alterações de arquivos para serem committed

  • git commit - Registra alterações no repositório local

  • git push - Envia commits locais para o repositório remoto

  • git pull - Puxa os commits mais recentes do repositório remoto

  • git branch - Gerencia branches para isolar trabalho

  • git merge - Mescla alterações entre branches

  • git log - Visualiza histórico de commits e alterações

Rebase

Rebase é um recurso que permite reescrever o histórico de commits em um branch. Ele move ou combina uma sequência de commits para uma nova base. O rebase é usado antes de mesclar branches para manter um histórico linear e remover commits desnecessários.

Para rebasar:

git checkout feature-branch 
git rebase main

Isso aplica os commits de feature-branch em cima do main, movendo os commits do main para a nova base. Conflitos precisam ser resolvidos manualmente.

O rebase não deve ser usado em commits enviados a repositórios remotos públicos, pois reescreve o histórico. Ele é mais adequado para reorganizar commits locais antes de compartilhá-los.

Benefícios do rebase:

  • Reorganiza commits em um histórico linear
  • Aplica commits em uma nova base
  • Combina ou remove commits

Saiba mais.

Recuperar Stash que foi Dropado

  • Liste os hash commits/stash que estão no cache
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
  • Pegue informações do commit/stash para achar o que você quer recuperar
git show da820072f5484b93c3a197212c7a32ba7748a519
  • Recupere seu stash e seja feliz
git stash apply da820072f5484b93c3a197212c7a32ba7748a519

Remover um arquivo do histórico de commits da sua branch no GIT

git filter-repo --path .env --invert-paths

Cherry Picking

Cherry-picking no Git permite que você selecione e aplique commits de um branch em outro de forma seletiva. Isso pode ser útil quando você só quer pegar certos commits de um branch de feature e mesclá-los em um branch de release, por exemplo.

git cherry-pick 368263d1eff5

Sem commitar:

git cherry-pick -n 368263d1eff5 

Provedores de Git como GitHub

Provedores de hospedagem de repositório Git como o GitHub oferecem recursos de colaboração além do controle de versão Git. Estes incluem:

  • Rastreamento de issues - Controla solicitações de recursos e bugs

  • Pull requests - Permite revisar alterações antes de mesclar

  • Controle de acesso - Gerencia permissões de usuários

  • Visualizações - Gráficos para visualizar atividade do projeto

  • Hospedagem de projeto - Hospeda sites e documentação de projetos

Conventional Commits

Os conventional Commits são uma convenção amplamente adotada para padronizar as mensagens de commit em projetos de software. Essa prática ajuda a manter um histórico de commits limpo e compreensível, facilitando a compreensão das alterações realizadas ao longo do tempo. A estrutura básica de um conventional commit consiste em um tipo, um escopo opcional e uma descrição concisa, separados por dois pontos. Por exemplo: feat: adiciona nova funcionalidade X.

Os tipos mais comuns são:

  • feat: uma nova funcionalidade
  • fix: correção de um bug
  • docs: alterações na documentação
  • style: mudanças de formatação ou estilo de código
  • refactor: refatoração de código sem alterações funcionais
  • test: adição ou alteração de testes
  • chore: outras alterações que não modificam o código-fonte

Além disso, as mensagens de commit devem ser escritas no tempo verbal presente e explicar claramente o motivo da alteração. O uso de conventional commits padroniza o processo de desenvolvimento, melhora a rastreabilidade das alterações e facilita a geração de notas de lançamento automatizadas.

Conclusão

Em resumo, o Git é um sistema de controle de versão distribuído que oferece gerenciamento superior de código-fonte. Ele é complementado por provedores Git como o GitHub que adicionam funções colaborativas como pull requests e rastreamento de issues. Juntos, eles fornecem uma solução completa de controle de versão e hospedagem de projetos.

Referências

Aprenda mais sobre GIT: https://learngitbranching.js.org


Mais posts

Cover Image for A psicologia do Dinheiro

A psicologia do Dinheiro

Morgan Housel oferece insights valiosos sobre a gestão financeira e tomada de decisões. O autor enfatiza que o sucesso financeiro depende mais do comportamento do que da inteligência ou conhecimento técnico. Housel destaca a importância da visão de longo prazo e da resiliência diante da volatilidade do mercado, encorajando a forcamos na sustentabilidade em vez de ganhos de curto prazo.

Cover Image for Bellsant

Bellsant

Estou na vanguarda do desenvolvimento de um aplicativo de saúde e bem-estar de ponta. Nossa pilha de tecnologia combina React Native para desenvolvimento móvel multiplataforma com um backend NodeJS sem servidor, aproveitando o AWS Lambda para escalabilidade e eficiência de custos.

Abílio Azevedo
Abílio Azevedo

NewsLetter

Eu enviarei o conteúdo postado aqui no blog. Sem Spam =)

Engenheiro de software experiente, formado em Engenharia Elétrica, com mais de 10 anos de experiência prática na construção de aplicativos móveis, web e back-end robustos e escaláveis em vários projetos, principalmente no setor de fintech. Mobile (React Native), Web (React e Next.JS) e Backend (Node.JS, PHP e DJANGO). Meu objetivo é criar produtos que agreguem valor às pessoas. - © 2024, Abílio Azevedo