Git, Controle de Versões Distribuído
Como mencionei anteriormente, atualmente utilizo o Git como repositório para todo o conteúdo deste blog. Nele, armazeno tanto os arquivos de configuração quanto o conteúdo em si (texto e imagens) que posteriormente geram o site funcional usando Hugo . Além desse uso específico, considero que o conhecimento em Git é fundamental para profissionais de TI, então decidi escrever esta introdução sobre a ferramenta.
O que é Git?
Git é um Sistema de Controle de Versões Distribuído (DVCS), originalmente criado por Linus Torvalds (o criador do Linux) em 2005.
Em essência, Git é uma ferramenta que rastreia as alterações feitas em arquivos ao longo do tempo. Ele permite que os desenvolvedores voltem a versões anteriores de um projeto, criem ramificações (branches) para trabalhar em novos recursos sem afetar o código principal, e mesclem (merge) essas alterações de volta de forma controlada quando acharem adequado. ``
Pontos Chave:
- Controle de Versões: Significa que ele registra cada modificação no código, permitindo que você saiba quem mudou o quê, e quando.
- Distribuído: Esta é a característica mais importante. Diferente de sistemas centralizados, cada desenvolvedor tem uma cópia completa de todo o histórico do projeto em sua máquina local. Isso significa que você pode trabalhar offline e o projeto não depende de um único servidor central (o que aumenta a resiliência e a segurança).
Como o Git Funciona?
O Git não armazena informações como uma lista de arquivos que mudam ao longo do tempo. Em vez disso, ele armazena as informações como um conjunto de instantâneos (snapshots) do sistema de arquivos.
1. O Modelo de Três Árvores (ou Três Estados)
O Git gerencia o projeto em três estados principais ou “árvores” lógicas:
| Estado | Nome (no Git) | Descrição |
|---|---|---|
| 1. Diretório de Trabalho | Working Directory | Os arquivos que você tem em sua máquina e que está modificando. Estes arquivos estão não rastreados (untracked) ou modificados (modified). |
| 2. Área de Preparação | Staging Area (Index) | É um cache intermediário. Aqui você coloca as alterações específicas do Diretório de Trabalho que deseja incluir no seu próximo commit. |
| 3. Repositório Local | Git Directory (Repository) | É a base de dados do Git, contendo o histórico de todas as alterações (commits) do projeto. É onde os instantâneos são armazenados permanentemente. |
2. O Commit (Instantâneo)
Um commit é a ação fundamental. É um instantâneo ou ponto de controle do seu projeto em um momento específico.
- Para criar um
commit, primeiro você deve mover os arquivos modificados do Diretório de Trabalho para a Área de Preparação (comandogit add). - Depois, você cria o
commit(comandogit commit), movendo esses arquivos da Área de Preparação para o Repositório Local. - Cada
committem um hash SHA-1 único que o identifica, uma mensagem descritiva e um ponteiro para ocommitimediatamente anterior (seu “pai”).
3. Ramificações (Branches)
As ramificações são ponteiros leves e móveis para um commit. Elas permitem aos desenvolvedores:
- Criar uma linha de desenvolvimento separada do código principal (
mainoumaster). - Trabalhar em um novo recurso ou correção de erro sem o risco de quebrar a versão estável.
- Depois que o trabalho estiver pronto, essa ramificação pode ser mesclada (merge) de volta à linha principal.
Por que o Git é importante?
Além do uso que um desenvolvedor de software pode dar, no qual não me concentrarei aqui, acredito que o Git oferece vários benefícios para administradores de sistemas ou especialistas em diversas áreas de TI:
- Auditoria e Rastreabilidade: Em segurança e conformidade, a rastreabilidade é vital. O Git fornece um registro imutável de todas as alterações. Se uma vulnerabilidade ou configuração incorreta for introduzida, você sabe exatamente qual
commita causou, quem o fez e quando, facilitando a auditoria e o rollback. - Infraestrutura como Código (IaC): Ferramentas como Terraform, Ansible ou CloudFormation utilizam o Git para armazenar sua configuração. Isso é crucial para o DevSecOps e para gerenciar ambientes de nuvem de forma segura e reproduzível.
- Colaboração e Resiliência: Permite que equipes distribuídas colaborem no mesmo código de forma segura, sem o risco de sobrescreverem o trabalho mútuo. Sendo distribuído, se um servidor central falhar (ex. GitLab, sobre o qual falaremos em outra publicação), o histórico completo ainda existe nas máquinas locais de quem estiver colaborando.
- Fluxo de Trabalho (CI/CD): O Git é o motor central da maioria dos pipelines de Integração Contínua e Implantação Contínua (CI/CD), garantindo que apenas o código revisado e testado chegue à produção. Por exemplo, no caso deste blog: eu uso um projeto no GitLab como repositório de código e, em seguida, implanto o site funcional no Cloudflare Pages através de um fluxo de CI/CD.
Portanto, o Git pode agregar valor para tarefas tão diversas como gerenciar infraestrutura como código, gerenciamento de configurações em servidores, orquestração de contêineres/Kubernetes, ou simplesmente gerenciamento de documentação (pessoalmente, usei-o para políticas de segurança e outros documentos).
Estes usos demonstram que o Git é uma ferramenta de gestão de arquitetura e conhecimento tão importante quanto uma ferramenta de programação. Permite aplicar os princípios de rastreabilidade e auditoria, essenciais em cibersegurança, a todos os aspectos de um sistema.
Pretendo escrever algo sobre o GitLab em breve, um dos servidores Git que costumo usar para projetos pessoais e de trabalho. E assim que tiver mais tempo, documentarei aqui a implantação completa deste blog com CI/CD usando Hugo + GitLab + Cloudflare Pages.