Git: Inicializando um repositório Git

Um repositório Git é o cerne do controle de versão; todo o histórico do código, os ramos e as tags são armazenados no repositório. Esta lição oferece uma explicação detalhada sobre como criar e gerenciar repositórios.

1. Visão geral dos repositórios Git

Um repositório Git é um banco de dados que contém todos os arquivos de um projeto e seu histórico completo.

(1) O que é um repositório Git?

Um repositório Git é um diretório que contém os arquivos do projeto e o histórico de versões. Ele apresenta as seguintes características:

(2) Duas maneiras de criar um repositório

100%
graph TB
    A[CreateGitWarehouse] --> B[git init<br/>Create a New Repository from Scratch]
    A --> C[git clone<br/>Clone a Remote Repository]
    
    B --> D[Empty Warehouse<br/>You need to add the files manually.]
    C --> E[Complete Repository<br/>Includes all historical data]
    
    style A fill:#e1f5ff
    style B fill:#fff4e1
    style C fill:#fff4e1

A diferença entre os dois métodos:

Método Comando Cenários aplicáveis Inclui histórico
Inicialização git init Criar um novo projeto ❌ Repositório vazio
Clonar git clone Participar de um projeto existente ✅ Histórico completo

2. Inicializar um repositório com git init

O comando git init converte um diretório comum em um repositório Git.

(1) Processo de inicialização

100%
graph LR
    A[Create a Directory] --> B[Go to the Table of Contents]
    B --> C[Run git init]
    C --> D[Create .git Table of Contents]
    D --> E[The warehouse was successfully created.]
    
    style A fill:#e1f5ff
    style E fill:#d4edda

(2) Uso básico

BASH
# Method1:Initialize in the current directory
cd my-project
git init

# Method2:Create and initialize a new directory
git init my-project

▶ Exemplo: Como criar um novo repositório

BASH
# Steps1:Create a project directory
mkdir my-project

# Steps2:Go to the Table of Contents
cd my-project

# Steps3:InitializationGitWarehouse
git init
# Output:
# Initialized empty Git repository in /path/to/my-project/.git/

# Steps4:View Repository Status
git status
# Output:
# On branch main
# No commits yet
# nothing to commit (create/copy files and use "git add" to track)

# Steps5:View the directory structure
ls -la
# Output:
# total 0
# drwxr-xr-x  3 user group 4096 Jan 1 00:00 .
# drwxr-xr-x  3 user group 4096 Jan 1 00:00 ..
# drwxr-xr-x  7 user group 4096 Jan 1 00:00 .git

(3) Inicializar em um projeto existente

Se você já tiver um arquivo de projeto, poderá inicializá-lo diretamente no diretório do projeto:

BASH
# Go to the directory of the existing project
cd existing-project

# InitializationGitWarehouse
git init

# View Status(All existing files are untracked.)
git status
# Output:
# Untracked files:
#   src/
#   README.md
#   package.json
💡 Dica: git init não altera os arquivos existentes; ele simplesmente cria o diretório .git. Todos os arquivos existentes passarão a ser considerados “Não rastreados”.


3. Estrutura do diretório .git

.git O diretório é o núcleo de um repositório Git e armazena todas as informações de controle de versão.

(1) Explicação detalhada da estrutura de diretórios

TEXT 📖 Somente leitura
.git/
├── HEAD           # Current branch pointer
├── config         # Local Configuration File
├── description    # Repository Description (for GitWeb)
├── hooks/         # Hook Scripts Directory
│   ├── pre-commit.sample
│   └── post-commit.sample
├── info/          # Additional Information
│   └── exclude    # Local Ignore Rules
├── objects/       # All Data Objects (Commits, Trees, Documents)
│   ├── info/
│   └── pack/
├── refs/          # Quote(Branch、Tags)
│   ├── heads/     # Local Branch
│   └── tags/      # Tags
└── index          # Buffer Information(Documents)

(2) Observações sobre documentos importantes

Arquivo/Diretório Descrição Exemplo de conteúdo
HEAD Aponta para o branch atual ref: refs/heads/main
config Configuração local Endereço do repositório remoto, informações do usuário, etc.
objects/ Armazena todos os objetos de dados Commits, árvores, instantâneos de arquivos (armazenados de forma compactada)
refs/heads/ Ponteiro de ramificação local Um arquivo por ramificação, contendo o hash do commit
refs/tags/ Pontoadores de tags Um arquivo por tag
índice Informações do stash Registra o status dos arquivos no stash

▶ Exemplo: Visualizando o diretório .git

BASH
# Steps1:View.gitTable of Contents
ls -la .git
# Output:
# -rw-r--r--  1 user group   23 Jan 1 00:00 HEAD
# -rw-r--r--  1 user group  137 Jan 1 00:00 config
# -rw-r--r--  1 user group   73 Jan 1 00:00 description
# drwxr-xr-x  2 user group 4096 Jan 1 00:00 hooks
# drwxr-xr-x  2 user group 4096 Jan 1 00:00 info
# drwxr-xr-x  4 user group 4096 Jan 1 00:00 objects
# drwxr-xr-x  4 user group 4096 Jan 1 00:00 refs

# Steps2:ViewHEADDocuments
cat .git/HEAD
# Output:ref: refs/heads/main

# Steps3:View Profile
cat .git/config
# Output:
# [core]
#     repositoryformatversion = 0
#     filemode = true
#     bare = false
#     logallrefupdates = true

# Steps4:View the branch directory
ls -la .git/refs/heads
# Output:(Initially empty,After creating a commit, there will bemainDocuments)

(3) Explicação detalhada do diretório “objects”

objects O repositório armazena todos os objetos de dados do Git, utilizando hashes SHA-1 como nomes de arquivo:

TEXT 📖 Somente leitura
objects/
├── 4a/          # Before hashing2"as" as the directory name
│   └── 8b2f...  # After hashing38"as" as the filename
├── info/
└── pack/        # Packaging and Storage(Space-saving)

Tipo de objeto:

⚠️ Observação: Não modifique manualmente os arquivos no diretório .git, a menos que tenha certeza absoluta do que está fazendo! Modificações incorretas podem causar corrupção no repositório.


4. Clonando um repositório com git clone

O comando git clone é usado para clonar um repositório remoto para o seu computador local.

(1) O papel da clonagem

A clonagem realiza as seguintes operações:

  1. Baixar o histórico completo: Inclui todos os commits, branches e tags
  2. Crie um repositório local: Crie um diretório .git no seu computador
  3. Vincular remotamente de forma automática: Crie uma referência remota chamada origin
  4. Ramo padrão: Normalmente main ou master

(2) Sintaxe do comando clone

BASH
# Basic Syntax
git clone <Warehouse Address>

# Clone to the specified directory
git clone <Warehouse Address> <Directory Name>

# Shallow Cloning(Clone Only RecentNNext Submission)
git clone --depth <In-Depth> <Warehouse Address>

# Clone a Single Branch
git clone -b <Branch Name> --single-branch <Warehouse Address>

▶ Exemplo: Clonando um repositório do GitHub

BASH
# Method1:UsageHTTPSClone(Recommended for Beginners)
git clone https://github.com/user/repo.git
# Output:
# Cloning into 'repo'...
# remote: Enumerating objects: 100, done.
# remote: Counting objects: 100% (100/100), done.
# remote: Compressing objects: 100% (80/80), done.
# remote: Total 100 (delta 20), reused 100 (delta 20), pack-reused 0
# Receiving objects: 100% (100/100), done.
# Resolving deltas: 100% (20/20), done.

# Method 2: Use SSH Clone (requires SSH key configuration)
git clone git@github.com:user/repo.git

# Method3:Clone to the specified directory
git clone https://github.com/user/repo.git my-project

# Method4:Shallow Cloning(Clone Only Recent1Next Submission,Fast)
git clone --depth 1 https://github.com/user/repo.git

# Steps:Verify the cloning results
cd repo
git remote -v
# Output:
# origin  https://github.com/user/repo.git (fetch)
# origin  https://github.com/user/repo.git (push)

(3) Estrutura de diretórios após a clonagem

100%
graph TB
    A[Remote Repository<br/>github.com/user/repo] --> B[git clone]
    B --> C[Local Warehouse]
    C --> D[.git Table of Contents<br/>Complete History+Remote Configuration]
    C --> E[Project Documents<br/>The latest version of the default branch]
    D --> F[origin Remote References]
    
    style A fill:#e1f5ff
    style C fill:#d4edda
💡 Dica: A clonagem cria automaticamente uma conexão remota origin que aponta para o endereço do repositório original. Você pode visualizá-la usando git remote -v.


5. Como verificar o status do armazém

git status é o comando básico para verificar o status atual de um repositório.

(1) Tipos de status de arquivo

100%
graph LR
    A[Document Status] --> B[Not tracked<br/>Untracked]
    A --> C[Modified<br/>Modified]
    A --> D[Saved<br/>Staged]
    A --> E[Submitted<br/>Committed]
    
    B -->|git add| D
    C -->|git add| D
    D -->|git commit| E
    E -->|Edit File| C
    
    style B fill:#fff3cd
    style C fill:#ffe6e6
    style D fill:#d4edda
    style E fill:#c3e6cb

(2) Tabela de descrição de status

Status Nome em inglês Descrição Próxima ação
Não rastreado Não rastreado Novo arquivo, não rastreado pelo Git git add Adicionado à área de preparação
Modified Modified Tracked file has been modified but not staged git add Added to staging area
Staged Staged Added to staging, ready to be committed git commit Commit
Confirmado Confirmado Confirmado no repositório local Continuar trabalhando ou enviar

▶ Exemplo: Verificando o status do repositório

BASH
# Steps1:Initialize the repository
mkdir demo && cd demo
git init

# Steps2:View Initial State(Empty Warehouse)
git status
# Output:
# On branch main
# No commits yet
# nothing to commit (create/copy files and use "git add" to track)

# Steps3:Create a New File
echo "# Demo Project" > README.md

# Steps4:View Status(Not tracked)
git status
# Output:
# On branch main
# No commits yet
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#     README.md
# nothing added to commit but untracked files present

# Steps5:Add to Stash
git add README.md

# Steps6:View Status(Saved)
git status
# Output:
# On branch main
# No commits yet
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#     new file:   README.md

# Steps7:Submit
git commit -m "Initial commit"

# Steps8:View Status(Clean)
git status
# Output:
# On branch main
# nothing to commit, working tree clean

(3) Visão geral do status

Use a opção -s para visualizar uma saída concisa do status:

BASH
git status -s
# Output Example:
#  M modified-file.txt    # Modified(On the leftMIndicates a temporary storage area,on the rightMIndicates workspace)
# A  new-file.txt         # New files that have been cached
# ?? untracked-file.txt   # Untracked files

❓ Perguntas Frequentes

P: Qual é a diferença entre git init e git clone?

R: git init cria um repositório totalmente novo e vazio, adequado para novos projetos; git clone copia um repositório remoto existente (incluindo todo o seu histórico), adequado para participar de um projeto já existente.

P: Posso excluir o diretório .git?

R: Sim, mas isso excluirá todo o histórico de versões! Após a exclusão, o diretório se tornará um diretório comum e não será mais um repositório Git. Você só deve excluí-lo se tiver certeza de que não precisa mais do histórico de versões.

P: Como faço para inicializar um repositório em um diretório que já contém arquivos?

R: Execute git init diretamente no diretório. O Git não modificará nenhum arquivo existente; ele simplesmente criará um diretório .git. Todos os arquivos existentes serão marcados como não rastreados.

P: O que devo fazer se a clonagem de um repositório estiver lenta?

R: Você pode usar um clone superficial git clone --depth 1 <url>, que clona apenas o commit mais recente e é mais rápido. Isso é adequado para situações em que você precisa apenas do código mais recente e não precisa do histórico.


📖 Resumo


📝 Exercícios

  1. Exercício básico (Dificuldade: ⭐): Crie um repositório Git chamado my-first-repo, examine a estrutura de diretórios de .git e explique a finalidade do arquivo HEAD.

  2. Advanced Exercise (Difficulty ⭐⭐): Create a README.md file and a src directory in the repository. Use git status to observe changes in the file statuses, and record the meaning of each status.

  3. Desafio (Dificuldade: ⭐⭐⭐): Clone um repositório público do GitHub (por exemplo, https://github.com/octocat/Hello-World.git), analise a configuração remota (git remote -v) e explique o significado e a finalidade de origin.

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%