1. O problema sem controle de versão: por que simplesmente copiar arquivos é uma má ideia
Vamos começar com uma situação do dia a dia. Imagine que você está trabalhando no seu projeto Java. Tudo vai bem até chegar o momento dos “experimentos”. Você decide mudar alguma coisa, mas tem medo de quebrar a versão que funciona. O que fazer? Claro, copiar o projeto!
Como resultado, aparecem no seu disco obras-primas como estas:
MyProject/
├── Main.java
├── Main_backup.java
├── Main_final.java
├── Main_final2.java
├── Main_tochno_final.java
├── Main_tochno_tochno_final.java
Soa familiar? Agora imagine que um amigo também entrou no projeto. Ele também gosta de copiar arquivos — do jeito dele. Como saber qual é a versão mais recente e funcional? Como descobrir quem mudou o quê? Como voltar atrás se o experimento não der certo?
Sem controle de versão:
- É fácil perder ou confundir o código que funciona.
- Não é possível reverter para uma versão antiga.
- É difícil colaborar em equipe (mesmo em 2 ou 3 pessoas).
- Caos e medo de experimentar.
São exatamente esses problemas que os sistemas de controle de versão — como o Git — resolvem.
2. Por que um desenvolvedor precisa do Git?
Git é um poderoso sistema de controle de versão usado para rastrear alterações no código-fonte durante o desenvolvimento de software. Ele permite aos desenvolvedores salvar diferentes versões de arquivos e coordenar o trabalho de várias pessoas em um projeto comum.
Conceitos básicos do Git:
Repositório
Repositório (ou “repo”) é o lugar onde fica todo o histórico do projeto, incluindo todas as alterações e versões dos arquivos.
Commits
commit é um estado salvo do projeto. Cada commit no Git contém informações sobre quais alterações foram feitas no projeto, por quem e quando. Os commits formam o histórico do projeto e permitem voltar a qualquer versão anterior.
gitGraph
commit id: "1"
commit id: "2"
commit id: "3"
commit id: "4"
commit id: "5"
commit id: "6"
Cada commit é um “instantâneo” do projeto que sucede o anterior, formando um histórico sequencial de alterações.
Branches
branch é uma linha de desenvolvimento independente. Por padrão, o Git cria a branch main. Você pode criar novas branches para desenvolver novas funcionalidades ou correções e, depois, uni-las novamente à branch principal.
gitGraph
commit id: "1"
commit id: "2"
branch develop
commit id: "3"
commit id: "4"
commit id: "5"
checkout main
commit id: "6"
commit id: "7"
merge develop
commit id: "8"
commit id: "9"
A partir da branch principal main, “brota” a branch develop para desenvolvimento em paralelo. Após concluir o trabalho, as alterações de develop são mescladas (merge) de volta em main.
3. Comandos básicos do Git (o que há por baixo do capô)
Abaixo está a lista de comandos principais para trabalhar com o Git via terminal. É importante entender quais comandos estão na base de todas as operações. Contudo, seguiremos a abordagem GUI e aprenderemos a executar todas essas ações por meio da interface gráfica do IntelliJ IDEA. Veja esses comandos como o que acontece “por baixo do capô”.
| Comando | Descrição |
|---|---|
git init |
Inicializa um novo repositório Git no diretório atual. |
git clone |
Clona um repositório a partir de uma URL para um novo diretório. |
git add |
Adiciona arquivos à área de staging para o próximo commit. |
git commit |
Registra as alterações preparadas no repositório. |
git push |
Envia as alterações do repositório local para o remoto. |
git pull |
Atualiza a branch atual com a versão mais recente do repositório remoto. |
git branch |
Mostra, cria ou remove branches. |
git merge |
Faz merge das alterações da branch especificada na branch atual. |
Esses comandos são as ferramentas fundamentais do Git, permitindo gerenciar alterações de código, branches e merges em projetos de qualquer tamanho.
sequenceDiagram
participant Diretório de trabalho
participant Área de staging (Staging)
participant Repositório local
participant Repositório remoto
Diretório de trabalho ->> Área de staging (Staging): git add (Preparar)
Área de staging (Staging) ->> Repositório local: git commit (Salvar localmente)
Repositório local ->> Repositório remoto: git push (Enviar para o servidor)
Repositório remoto ->> Diretório de trabalho: git pull (Baixar atualizações)
4. Três locais de armazenamento do código
Quando você usar um sistema de controle de versão para o seu código, ele, grosso modo, ficará armazenado em três lugares:
1. Repositório remoto
É o local centralizado para armazenar seu código, normalmente hospedado em serviços como GitHub, GitLab ou Bitbucket. Eles fornecem armazenamento centralizado de código e são a base para o trabalho colaborativo. O repositório remoto serve como ponto de integração para automações como build, testes e implantação de aplicações.
2. Repositório local
O repositório local é sua cópia pessoal do código, armazenada no seu computador. Nele, você pode realizar todas as operações do Git (commits, branches, merges) sem precisar estar conectado à internet.
3. Diretório de trabalho
O diretório de trabalho no seu computador contém os arquivos atuais do projeto, nos quais você está trabalhando no momento. É onde você pode ver e modificar arquivos, adicionar novas funcionalidades ou corrigir bugs.
Esses componentes, em conjunto, fornecem uma infraestrutura poderosa para gerenciamento de código-fonte, permitindo aos desenvolvedores gerenciar o histórico do projeto e colaborar.
5. GitHub — seu portfólio
GitHub é a principal plataforma web para hospedagem de código-fonte, que usa o sistema de controle de versão Git. Fundada em 2008, rapidamente se tornou uma das ferramentas-chave para desenvolvedores no mundo todo.
O GitHub permite aos usuários criar repositórios para gerenciar projetos, controlar e rastrear mudanças no código e colaborar com outros desenvolvedores. Para o desenvolvedor moderno, o perfil no GitHub é uma parte importante do portfólio, que pode ser mostrada a potenciais empregadores.
6. Criando seu primeiro repositório no GitHub
Passo 1. Acesse https://github.com e cadastre-se.
Passo 2. Clique no botão New repository para criar um novo repositório.
Passo 3. Defina os parâmetros do repositório:
- Nome do repositório: escolha um nome significativo.
- Público ou privado: para projetos de estudo, é melhor escolher “Public”, para que outras pessoas possam vê-lo.
- Add a README file: marque esta opção. O README é a “cara” do seu projeto.
- Add .gitignore: clique no menu suspenso e escolha um template para a sua linguagem.
- Choose a license: pode deixar em branco.
- Clique em
Create repository.
Passo 4. Parabéns, seu primeiro repositório remoto foi criado!
7. Instalação e configuração do Git
Embora os fundamentos do Git possam ser estudados por meio de comandos de console (como mostrado no vídeo), no trabalho do dia a dia 99% dos desenvolvedores usam ferramentas convenientes integradas ao ambiente de desenvolvimento. Nosso objetivo é ensinar você a trabalhar como os profissionais fazem.
A interface para trabalhar com Git em todas as IDEs modernas da JetBrains — seja o IntelliJ IDEA para Java/Kotlin, Rider para C# ou PyCharm para Python — é praticamente idêntica. Isso significa que, aprendendo a trabalhar com Git em um ambiente, você conseguirá aplicar essas habilidades facilmente em qualquer outro. Por isso, usaremos o IntelliJ IDEA como exemplo universal. Tudo o que você verá aqui terá a mesma aparência e funcionará do mesmo jeito na sua IDE favorita.
Para trabalhar com o Git no seu computador, primeiro é preciso instalá-lo. Se você usa o IntelliJ IDEA, ele provavelmente sugerirá instalar o Git automaticamente, caso não seja encontrado no sistema. Recomendamos aceitar essa sugestão — é o caminho mais simples.
Feche o projeto atual, escolhendo File > Close Project, e clique em Clone Repository.
Se preferir instalar manualmente, use o site oficial: https://git-scm.com/downloads.
8. Um pouco de história: main vs master
Antes, a branch padrão no Git se chamava master. Porém, em 2020, a comunidade de desenvolvedores e as maiores plataformas, incluindo o GitHub, passaram a usar o termo mais neutro — main.
Isso é importante porque, em alguns artigos ou projetos antigos, você ainda pode encontrar menções à branch master. Nas nossas aulas e em projetos modernos, a branch principal será sempre main.
Para saber mais sobre a mudança para main, veja:
GO TO FULL VERSION