Git: Introdução ao Git e aos conceitos de controle de versão

O Git é o sistema de controle de versão distribuído mais popular do mundo — ele torna a colaboração em equipe simples e eficiente.

Este tutorial foi elaborado para iniciantes sem experiência prévia. Ele começa com os conceitos básicos do controle de versão e avança até que você se torne proficiente no uso do Git para colaboração em equipe.

1. O que você vai aprender


2. O que é controle de versão?

O controle de versão é um sistema que rastreia as alterações no conteúdo dos arquivos, de modo que versões específicas possam ser recuperadas no futuro.

(1) Por que o controle de versão é necessário?

Imagine que você está escrevendo um artigo:

TEXT 📖 Somente leitura
Thesis-v1.doc          # First Edition
Thesis-v2.doc          # Some content has been revised.
Thesis-Final Version.doc       # My advisor said I still need to revise it.
Thesis-Final Version2.doc      # Made a few more changes
Thesis-I'll never change the layout.doc    # This really is the final version.
Thesis-I'll never change the layout2.doc   # All right,Still needs to be revised...

O problema dessa abordagem:

Os sistemas de controle de versão foram criados justamente para resolver essas questões.


3. A evolução do controle de versão

(1) 3.1 Controle de versão local

A forma mais antiga de controle de versão consistia em armazenar todas as versões de um arquivo localmente.

100%
graph TB
    A[Local Database<br/>v1, v2, v3] --> B[Workspace]

Ferramentas representativas: RCS (Sistema de Controle de Revisões)

Desvantagens: Não há suporte para colaboração entre vários usuários


(2) 3.2 Controle de versão centralizado

Todas as versões do conjunto de dados estão armazenadas em um único servidor. Os membros da equipe baixam os arquivos do servidor, fazem as alterações e, em seguida, os enviam de volta.

100%
graph TB
    S[Central Server<br/>All Versions]
    S --> A[UserA]
    S --> B[UserB]
    S --> C[UserC]

Principais ferramentas: CVS, Subversion (SVN), Perforce

Vantagens:

Desvantagens:


(3) 3.3 Controle de versão distribuído

Todo desenvolvedor possui um repositório completo de controle de versão (repositório) que inclui todo o histórico.

100%
graph LR
    A[UserAWarehouse<br/>Complete History] <--> B[UserBWarehouse<br/>Complete History]
    B <--> C[UserCWarehouse<br/>Complete History]
    A <--> C

Ferramentas representativas: Git, Mercurial, Bazaar

Vantagens:

Desvantagens:


4. O nascimento do Git

(1) 4.1 As origens do Git

Em 2005, ocorreu um grande acontecimento na comunidade de desenvolvimento do kernel do Linux:

Objetivos de projeto do Git:

  1. Velocidade: Deve ser muito rápido
  2. Simplicidade: O design deve ser simples e elegante
  3. Suporte ao desenvolvimento não linear: Permite milhares de ramificações paralelas
  4. Totalmente distribuído: Cada desenvolvedor possui um repositório completo
  5. Gestão eficiente de projetos de grande porte: como o kernel do Linux

Linus concluiu a versão inicial do Git em abril de 2005, em cerca de duas semanas. Hoje, o Git se tornou o sistema de controle de versão mais popular do mundo.

(2) 4.2 A filosofia de design do Git

O design do Git incorpora vários princípios fundamentais:

Um instantâneo, não as diferenças

Outros sistemas (como o SVN) armazenam as diferenças entre os arquivos:

TEXT 📖 Somente leitura
v1: file.txt (Original Document)
v2: file.txt + diff1 (Storage Differences)
v3: file.txt + diff1 + diff2 (Cumulative Difference)

O Git armazena um instantâneo completo de cada commit:

TEXT 📖 Somente leitura
v1: file.txtA complete snapshot of
v2: file.txtA complete snapshot of
v3: file.txtA complete snapshot of

Vantagens:

Quase todas as operações são realizadas localmente

Apenas as operações de envio e recebimento exigem conexão com a internet.


5. Conceitos básicos do Git

(1) 5.1 Repositório

Um repositório é um conceito fundamental no Git e inclui:

100%
graph TB
    subgraph GitWarehouse
        R[Repository .git<br/>All Commit History<br/>All Branch Information]
        S[Buffer Stage<br/>Changes Ready to Be Submitted]
        W[Workspace Work<br/>Files Actually Edited]
    end
    W -->|git add| S
    S -->|git commit| R

(2) 5.2 Confirmar

Um commit é a unidade básica do Git e consiste em:

TEXT 📖 Somente leitura
commit a1b2c3d4e5f6... (40Bit Hash)
Author: Zhang San <zhangsan@example.com>
Date:   2024-01-01 10:00:00

    Add User Login Functionality

(3) 5.3 Ramificação

Um branch é um ponteiro móvel para um commit. Criar um branch no Git é extremamente simples — basta criar um arquivo de 41 bytes (um hash de 40 bytes mais um caractere de nova linha de 1 byte).

100%
graph LR
    C1[SubmitC1] --> C2[SubmitC2] --> C3[SubmitC3]
    main[mainBranch] --> C3
    feature[featureBranch] --> C3

6. Casos de uso do Git

(1) 6.1 Projetos pessoais

(2) 6.2 Trabalho em equipe

(3) 6.3 Projetos de código aberto

(4) 6.4 Integração Contínua/Implantação Contínua (CI/CD)


7. Git x outros sistemas de controle de versão

Recursos Git SVN CVS
Arquitetura Distribuída Centralizada Centralizada
Trabalho offline ✅ Totalmente compatível ❌ Não compatível ❌ Não compatível
Criação de ramificação Muito rápida (O(1)) Lenta (cópia de diretório) Não suportada
Método de armazenamento Instantâneo Diferencial Diferencial
Dependência de rede Apenas push/pull Todas as operações Todas as operações
Recuperação de desastres Alta (backup completo por pessoa) Baixa (depende do servidor) Baixa

▶ Exemplo: Comandos básicos do Git

BASH
# InitializationGitWarehouse
git init

# View Repository Status
git status

# Add a file to the staging area
git add .

# Submit Changes
git commit -m "Initial Submission"

# View commit history
git log

❓ Perguntas Frequentes

P: Qual é a relação entre o Git e o GitHub?

R: O Git é uma ferramenta de controle de versão, e o GitHub é uma plataforma de hospedagem de código baseada no Git. É como se o Git fosse um “carro” e o GitHub fosse um “estacionamento” — você pode usar o Git para gerenciar seu código localmente e, em seguida, enviá-lo ao GitHub para hospedagem e colaboração.

P: Por que eu deveria aprender Git?

R: O Git se tornou o padrão do setor. 95% dos desenvolvedores usam o Git, e praticamente todos os projetos de código aberto são gerenciados com o Git. Se você não aprender a usar o Git, não poderá participar de colaborações em equipe nem contribuir com projetos de código aberto.

P: O controle de versão distribuído ocupa muito espaço?

R: O Git utiliza técnicas de compactação e deduplicação, o que o torna altamente eficiente em termos de armazenamento. Por exemplo, o kernel do Linux tem mais de 1 milhão de commits, mas o repositório do Git ocupa apenas cerca de 1 GB.

P: O SVN ainda é usado?

R: Ainda o utilizamos, mas seu uso vem diminuindo ano a ano. O SVN é adequado para gerenciar arquivos binários de grande porte (como recursos de jogos), mas recomendamos o uso do Git para novos projetos.


📖 Resumo


📝 Exercícios

  1. Pergunta básica: Explique com suas próprias palavras a diferença entre “controle de versão distribuído” e “controle de versão centralizado”, citando pelo menos três pontos.

  2. Pergunta avançada: Pesquise projetos ou empresas da sua região para descobrir quais ferramentas de controle de versão eles utilizam e por que escolheram essas ferramentas.

  3. Desafio: Leia o e-mail original de Linus Torvalds sobre o Git (pesquise por “Linus Torvalds Git mailing list”) para conhecer os antecedentes e a filosofia de design por trás da criação do Git.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%