Git: Introdução à clonagem de repositórios Git e à…

A clonagem é o processo de obter uma cópia completa de um repositório Git de um servidor remoto, incluindo todos os arquivos, ramificações e todo o histórico de commits. Esse é o primeiro passo para colaborar com uma equipe.

1. Visão geral da clonagem

(1) O que é clonagem?

A clonagem é o processo de copiar um repositório remoto na íntegra para o seu computador local. Ao contrário do download de um arquivo ZIP, a clonagem recupera o repositório Git completo, incluindo:

(2) A diferença entre clonagem e download

Muitas pessoas perguntam: por que não baixar simplesmente o arquivo ZIP? Vamos comparar as duas opções:

Ação Conteúdo É possível visualizar o histórico? É possível enviar alterações? É possível alternar entre versões?
git clone Repositório completo
Baixar ZIP Apenas instantâneo do arquivo

(3) Casos de uso para clonagem

A clonagem é utilizada principalmente nos seguintes cenários:


2. O comando git clone

(1) Sintaxe básica

Sintaxe básica do comando git clone:

BASH
# Clone to the current directory(Automatically create a folder with the same name)
git clone <Warehouse Address>

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

(2) Processo de clonagem

O processo completo de clonagem é o seguinte:

100%
sequenceDiagram
    participant L as Local Warehouse
    participant R as Remote Server
    
    L->>R: 1. Initiate a Cloning Request
    R->>L: 2. Send Repository Metadata
    R->>L: 3. Send All Objects(Documents、Submit)
    R->>L: 4. Send Branch Information
    L->>L: 5. CreateoriginRemote Association
    L->>L: 6. Check out the default branch
    L->>L: 7. Cloning Complete

▶ Exemplo: Clonando um repositório do GitHub

BASH
# CloneReactProject(HTTPSMethod)
git clone https://github.com/facebook/react.git

# Output Information:
# Cloning into 'react'...
# remote: Enumerating objects: 156789, done.
# remote: Counting objects: 100% (156789/156789), done.
# remote: Compressing objects: 100% (456/456), done.
# remote: Total 156789 (delta 12345), reused 156333 (delta 12000), pack-reused 0
# Receiving objects: 100% (156789/156789), 45.67 MiB | 5.23 MiB/s, done.
# Resolving deltas: 100% (123456/123456), done.

# Clone to the specified directory
git clone https://github.com/facebook/react.git my-react-project

# Clone to the current directory(Pay attention to the last point)
git clone https://github.com/facebook/react.git .

▶ Exemplo: Visualização de informações após a clonagem

BASH
# Clone the repository
git clone https://github.com/user/demo.git
cd demo

# View Remote Repository Associations
git remote -v
# origin  https://github.com/user/demo.git (fetch)
# origin  https://github.com/user/demo.git (push)

# View All Branches(Including remote branches)
git branch -a
# * main
#   remotes/origin/HEAD -> origin/main
#   remotes/origin/main
#   remotes/origin/develop
#   remotes/origin/feature

# View Commit History
git log --oneline -5
# a1b2c3d (HEAD -> main, origin/main, origin/HEAD) Update README
# e4f5g6h Add new feature
# i7j8k9l Fix bug in login
# m0n1o2p Initial commit

3. Opções de clonagem

(1) Clonagem superficial

Em projetos grandes, um clone completo pode demorar muito tempo e exigir bastante espaço. Um clone superficial baixa apenas os commits mais recentes:

BASH
# Clone only the most recent commit
git clone --depth 1 <Warehouse Address>

# Clone RecentNNext Submission
git clone --depth 10 <Warehouse Address>

Características da clonagem superficial:

(2) Clonagem de ramo único

Se você precisar apenas de um branch específico, pode clonar apenas esse branch:

BASH
# Clone only the specified branch
git clone --branch main --single-branch <Warehouse Address>

# Abbreviated form
git clone -b main --single-branch <Warehouse Address>

(3) Clonagem recursiva

Se um projeto contiver submódulos, é necessário cloná-los recursivamente:

BASH
# Recursive Cloning,Clone all submodules at the same time
git clone --recursive <Warehouse Address>

# If you have already cloned it,Submodules can be initialized individually
git clone <Warehouse Address>
cd <Table of Contents>
git submodule update --init --recursive

(4) Comparação das opções de clonagem

Opção Descrição Downloads Casos de uso
Sem opções Clone completo Todas Desenvolvimento diário
--depth 1 Clone superficial Apenas o commit mais recente CI/CD, implantação
--single-branch Ramificação única Especificar apenas uma ramificação Apenas uma ramificação específica
--recursive Clonagem recursiva Inclui submódulos O projeto possui submódulos
--bare Servidor bare-metal Sem área de trabalho Imagem do servidor

▶ Exemplo: Clonagem superficial de um projeto grande

BASH
# LinuxFull Kernel Cloning(3GB+,It takes a long time)
git clone https://github.com/torvalds/linux.git
# Cloning into 'linux'...
# Receiving objects: 100% (8234567/8234567), 3.45 GiB | 1.23 MiB/s, done.

# Shallow CloningLinuxKernel(100MB+,Fast)
git clone --depth 1 https://github.com/torvalds/linux.git
# Cloning into 'linux'...
# Receiving objects: 100% (12345/12345), 156.78 MiB | 5.67 MiB/s, done.

# View Historical Differences
cd linux
git log --oneline
# Only1Next Submission(Shallow Cloning)

# Fully cloned repository
git log --oneline | wc -l
# 1M+ Next Submission

4. Endereço remoto

(1) Tipo de protocolo

O Git oferece suporte a vários protocolos para acessar repositórios remotos:

100%
graph TB
    A[Remote Repository Address] --> B[HTTPS]
    A --> C[SSH]
    A --> D[Git Protocol]
    A --> E[Local Path]
    
    B --> B1[Example: https://...]
    C --> C1[Example: git@...]
    D --> D1[Example: git://...]
    E --> E1[Example: /path/to/...]
    
    style B fill:#d4edda
    style C fill:#c3e6cb
    style D fill:#fff3cd
    style E fill:#f8d7da

(2) HTTPS x SSH

Os dois protocolos mais utilizados são o HTTPS e o SSH:

Recurso HTTPS SSH
Formato do endereço https://github.com/user/repo.git git@github.com:user/repo.git
Dificuldade de configuração Fácil, não requer configuração Requer a geração e configuração de chaves SSH
Método de autenticação Nome de usuário + senha/token Chave SSH
Ação de envio É necessário inserir credenciais a cada vez Não é necessária senha
Firewall Compatível, usa a porta 443 Pode ser bloqueado, usa a porta 22
Cenários recomendados Iniciantes, uso ocasional Desenvolvimento diário, automação

(3) Como usar um token de acesso pessoal

A partir de 2021, o GitHub não oferece mais suporte à autenticação por senha; é necessário usar um token de acesso pessoal:

BASH
# Use when cloningToken
git clone https://<token>@github.com/user/repo.git

# Or enter it when sending the push notificationTokenAs a password
git clone https://github.com/user/repo.git
# Username: your-username
# Password: ghp_xxxxxxxxxxxx(UsageToken)

▶ Exemplo: Clonagem utilizando protocolos diferentes

BASH
# HTTPSMethod(Recommended for Beginners)
git clone https://github.com/facebook/react.git

# SSHMethod(Recommended for Experienced Developers)
git clone git@github.com:facebook/react.git

# Git Protocol(Read-only,Used less frequently)
git clone git://github.com/facebook/react.git

# Local Path(Clone the local repository)
git clone /path/to/local/repo.git

# Clone from another user's directory on the same server
git clone file:///home/otheruser/project.git

5. Configuração pós-clonagem

(1) Associações criadas automaticamente

Assim que a clonagem for concluída, o Git criará automaticamente a seguinte configuração:

100%
graph TB
    A[Cloned repository] --> B[.gitTable of Contents]
    A --> C[Workspace Files]
    A --> D[Remote Associationorigin]
    
    B --> B1[All Commit History]
    B --> B2[All Branch Information]
    B --> B3[Profile]
    
    D --> D1[fetchAddress]
    D --> D2[pushAddress]
    D --> D3[Default Branch Tracking]
    
    style A fill:#e1f5ff
    style D fill:#d4edda

(2) Visualizar informações remotas

BASH
# View the name of the remote repository
git remote
# origin

# View Details
git remote -v
# origin  https://github.com/user/repo.git (fetch)
# origin  https://github.com/user/repo.git (push)

# View details about a remote repository
git remote show origin
# * remote origin
#   Fetch URL: https://github.com/user/repo.git
#   Push  URL: https://github.com/user/repo.git
#   HEAD branch: main
#   Remote branches:
#     main     tracked
#     develop  tracked
#   Local branch configured for 'git pull':
#     main merges with remote main
#   Local ref configured for 'git push':
#     main pushes to main (up to date)

(3) Ramificação clonada

A clonagem recupera todos os branches remotos, mas faz o check-out apenas do branch padrão:

BASH
# View local branches
git branch
# * main  (Only the default branch)

# View All Branches(Including remote)
git branch -a
# * main
#   remotes/origin/HEAD -> origin/main
#   remotes/origin/main
#   remotes/origin/develop
#   remotes/origin/feature-login

# Create a local branch to track a remote branch
git checkout -b develop origin/develop
# Or use the abbreviation
git checkout develop
# Branch 'develop' set up to track remote branch 'develop' from 'origin'.
# Switched to a new branch 'develop'

▶ Exemplo: Fluxo de trabalho completo após a clonagem

BASH
# 1. Clone the repository
git clone https://github.com/user/project.git
cd project

# 2. View Status
git status
# On branch main
# Your branch is up to date with 'origin/main'.

# 3. View Remote Information
git remote -v

# 4. View All Branches
git branch -a

# 5. Switch to another branch
git checkout develop

# 6. View Commit History
git log --oneline --graph --all -10

# 7. Get the latest updates
git pull origin main

❓ Perguntas Frequentes

P: Qual é a diferença fundamental entre clonar e baixar um arquivo ZIP?

R: A clonagem cria um repositório Git completo, que inclui todo o histórico, informações sobre ramificações e metadados de controle de versão. Você pode visualizar o histórico, alternar entre versões, criar ramificações e enviar alterações. O download de um arquivo ZIP fornece apenas um instantâneo dos arquivos; ele não inclui a funcionalidade de controle de versão, portanto, não é possível realizar nenhuma operação do Git.

P: O que posso fazer se a clonagem de um repositório grande estiver demorando muito?

R: Você pode usar um clone superficial --depth 1 para baixar apenas os commits mais recentes, o que será muito mais rápido. Se precisar apenas de um branch específico, use a opção --single-branch. Além disso, você pode usar um site espelho nacional para acelerar o processo, como o espelho fastgit do GitHub.

P: Como faço para enviar para um repositório remoto após a clonagem?

R: Você precisa de permissões de envio. Repositórios públicos só podem ser clonados, não é possível enviar arquivos para eles. Para repositórios com permissões, você precisará inserir seu nome de usuário e token ao usar HTTPS, ou configurar uma chave SSH ao usar SSH. O comando de envio é git push origin <分支名>.

P: Como faço para clonar um repositório privado?

R: Repositórios privados exigem autenticação. Para HTTPS, use seu nome de usuário e seu token de acesso pessoal; para SSH, use uma chave SSH configurada. Certifique-se de que sua conta tenha permissões de acesso; caso contrário, você verá a mensagem “Falha na autenticação”.

P: E se eu receber a mensagem “fatal: o caminho de destino já existe”?

R: O diretório de destino já existe. Você pode excluir o diretório existente e cloná-lo novamente, cloná-lo para um diretório diferente git clone <地址> <新目录名> ou acessar o diretório existente e executar git pull para atualizá-lo.


📖 Resumo


📝 Exercícios

  1. Exercício básico: Clone o repositório Hello-World no GitHub, visualize as informações do repositório remoto e todos os branches e compreenda a estrutura de diretórios após a clonagem.

  2. Exercício avançado: Compare um clone completo e um clone superficial --depth 1 de um projeto grande (como o React), compare o tempo de download e o tamanho do diretório .git e compreenda os casos de uso dos clones superficiais.

  3. Desafio: Pesquise como clonar um repositório localmente e, em seguida, enviá-lo para outro repositório remoto (por exemplo, clonar do GitHub e enviar para o GitLab), e compreenda o gerenciamento de repositórios remotos e as configurações com múltiplos repositórios remotos.

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%