Conceitos-chave

Git

O Git é um sistema de controle de versão que os desenvolvedores usam para rastrear e gerenciar alterações em projetos de software.

Imagine que você está escrevendo uma história e, com o tempo, faz várias edições: apaga algumas partes, adiciona outras ou reformula capítulos inteiros. Se você quisesse relembrar ou restaurar uma versão anterior da história, precisaria de um registro detalhado de todas as alterações.

É basicamente isso que o Git faz no desenvolvimento de software: ele mantém um histórico completo de cada modificação feita no código.

No coração do funcionamento do Git está o repositório. Pense no repositório como o diretório de um projeto, que contém não só a versão atual de todos os arquivos do projeto, mas também um registro extenso de cada alteração feita neles desde que o repositório foi inicializado. Conforme os desenvolvedores alteram o código, o Git registra essas alterações no histórico. Isso permite que os desenvolvedores voltem a versões anteriores do código se necessário, comparem alterações entre versões diferentes e colaborem com outras pessoas no mesmo projeto.

O Git resolve o problema de gerenciar alterações em uma base de código ao longo do tempo, principalmente quando vários desenvolvedores trabalham no mesmo projeto. Sem um sistema de controle de versão como o Git, seria difícil saber quem alterou o quê e quando, o que levaria a conflitos e trabalho perdido. O Git ajuda a evitar esses problemas fornecendo um histórico claro de alterações e permitindo que os desenvolvedores trabalhem em branches separadas do código.

O Git foi desenvolvido em 2005 por Linus Torvalds, o engenheiro de software nascido na Finlândia mais conhecido por criar o kernel do Linux. Desde então, ele se tornou uma ferramenta essencial no desenvolvimento de software moderno, principalmente na comunidade open source. Plataformas como GitHub, GitLab e Bitbucket construíram ecossistemas inteiros em torno do Git, oferecendo ferramentas de colaboração, integração contínua e deploy.

Interfaces do Git

Entrada principal: CLI vs GUI

Embora o Git seja principalmente uma ferramenta de linha de comando, também existem muitas interfaces gráficas que oferecem um jeito mais amigável de interagir com ele. Essas ferramentas podem ser especialmente úteis para quem está começando no Git ou prefere uma interface visual. Muitos IDEs populares, como o Visual Studio Code e o IntelliJ IDEA, têm suporte integrado ao Git, o que facilita usá-lo dentro do ambiente de desenvolvimento.

Git no Terminal do macOS
Git no Terminal do macOS
Git na interface de usuário do VS Code
Git na interface de usuário do VS Code

Controle de versão em software comum vs. Git

Muitas ferramentas que não são de programação, como Google Docs, Microsoft Word ou Dropbox, têm alguma forma de histórico de versões. Mas elas não funcionam como o Git. Os sistemas tradicionais de controle de versão rastreiam as alterações de cada arquivo de forma independente das alterações nos outros arquivos.

Por exemplo, imagine que você escreveu um livro no Google Docs, com cada capítulo em um documento separado. O livro está quase pronto e, em poucos dias, você precisa enviá-lo para a editora.

À noite, depois de exagerar no vinho, você decide introduzir uma nova linha narrativa bem rapidinho. Você mexe em vários capítulos, adiciona alguns parágrafos aqui e ali. A manhã chega, e você percebe que a ideia toda foi uma bagunça completa e quer desfazer tudo.

Por sorte, o Google Docs tem histórico de documentos, que permite voltar o documento a uma versão anterior. Mas você precisa abrir cada um dos documentos alterados e desfazer as alterações nele. Se você acidentalmente esquecer um dos arquivos... (que nada, isso nunca vai acontecer... né?).

Embora todas essas alterações fizessem parte de uma única grande atualização, elas ficam completamente separadas no histórico de cada documento.

O Git rastreia alterações no projeto inteiro e permite criar "snapshots" do estado completo do projeto em um momento específico. Se aquele projeto de livro estivesse no Git, você poderia fazer um commit capturando todas as alterações de todos os capítulos de uma vez. Se depois decidisse desfazer esse commit, o Git reverteria todas as alterações de uma só vez, restaurando o projeto inteiro ao estado anterior. Isso facilita muito o gerenciamento de alterações complexas que afetam vários arquivos e garante que o histórico do projeto continue coerente.