git clone

Aqui, vamos examinar o comando git clone em detalhes. O git clone é um utilitário de linha de comando que é usado para selecionar um repositório existente e criar um clone ou cópia do repositório de destino. Nesta página, vamos discutir opções de configuração estendidas e casos de uso comuns do git clone. Alguns dos pontos que vamos cobrir aqui são:

  • Clonar um repositório local ou remoto
  • Clonar um repositório vazio
  • Usar opções rasas para clonagem parcial dos repositórios
  • Sintaxe de URL do Git e protocolos suportados

No guia para configurar um repositório, falamos sobre um caso de uso básico do git clone. Esta página vai explorar cenários mais complexos de configuração e clonagem.

Objetivo: cópia de desenvolvimento de colaboração de repositório para repositório

Se um projeto já tiver sido configurado no repositório central, o comando git clone vai ser a maneira mais comum para os usuários obterem uma cópia de desenvolvimento. Assim como o git init, a clonagem é em geral uma operação única. Depois que um desenvolvedor obtém uma cópia de trabalho, todas as operações e colaborações de controle de versão são gerenciadas por meio do repositório local.

Colaboração de repositório para repositório

É importante entender que a ideia do Git da “cópia ativa” é muito diferente da cópia ativa obtida ao fazer o check out de código do repositório SVN. Ao contrário do SVN, o Git não faz distinção entre as cópias ativas e o repositório central. São todos repositórios Git totalmente desenvolvidos.

É uma diferença fundamental entre a colaboração com o Git e a colaboração com o SVN. Enquanto o SVN depende do relacionamento entre o repositório central e a cópia ativa, o modelo de colaboração do Git é baseado na interação de repositório para repositório. Em vez de confirmar uma cópia ativa no repositório central do SVN, você faz push ou pull de commits de um repositório a outro.

Tutorial do Git: colaboração de repositório para cópia de trabalho Tutorial do Git: colaboração de repositório para repositório

Claro que nada impede que você dê um significado especial a determinados repositórios do Git. Por exemplo, ao apenas designar um repositório do Git como repositório “central”, é possível replicar um fluxo de trabalho centralizado usando o Git. O importante é entender que esse processo é realizado por convenções em vez de ser ligado ao próprio VCS.

Uso

O git clone é usado sobretudo para apontar para um repositório existente e fazer um clone ou cópia deste repositório no novo diretório, em outro local. O repositório original pode estar localizado no sistema de arquivos local ou em protocolos com suporte a acesso por máquinas remotas. O comando git clone copia um repositório do Git existente. É parecido com o checkout do SVN, com a diferença de que a "cópia de trabalho" é um repositório completo do Git — que tem seu próprio histórico, gerencia seus próprios arquivos e é um ambiente isolado como um todo do repositório original.

Por conveniência, a clonagem cria com agilidade uma conexão remota chamada "origem" apontando para o repositório original. Essa conexão facilita muito a interação com um repositório central. Esta conexão automática é estabelecida criando referências do Git para as cabeças da ramificação remota em refs/remotes/origin e inicializando as variáveis de configuração remote.origin.url e remote.origin.fetch.

Um exemplo demonstrando o git clone pode ser encontrado no guia de configuração do repositório. O exemplo abaixo demonstra como obter uma cópia local do repositório central armazenado no servidor acessível em example.com usando o nome de usuário SSH john:

git clone ssh://john@example.com/path/to/my-project.git 
cd my-project 
# Start working on the project

O primeiro comando inicializa um novo repositório do Git na pasta my-project na máquina local e o preenche com o conteúdo do repositório central. Depois, você pode usar o cd no projeto e começar a editar os arquivos, fazer o commit de capturas de tela e interagir com outros repositórios. Observe também que a extensão .git é omitida do repositório clonado. Assim, o estado diferente de vazio da cópia local é refletido.

Clonar para uma pasta específica

git clone <repo> <directory>

Clone o repositório localizado em <repo> na pasta chamada ~<directory>! na máquina local.

Clonar uma tag específica

git clone --branch <tag> <repo>

Clone o repositório localizado em <repo> e apenas clone a ref para <tag>.

Clone superficial

git clone -depth=1 <repo>

Clone o repositório localizado em <repo> e clone apenas o
histórico de commits especificado pela opção depth=1. Neste exemplo, é feito um clone do <repo> e apenas o commit mais recente é incluído no novo repositório clonado. A clonagem rasa é mais útil ao trabalhar com repositórios que têm um histórico de commits extenso. Um extenso histórico de commits pode causar problemas de escala, como limites de uso de espaço em disco e longos tempos de espera ao clonar. Um clone superficial pode ajudar a aliviar esses itens em escala.

Opções de configuração

git clone -branch

O argumento -branch permite que você especifique uma ramificação específica para clonar, em vez da ramificação que o HEAD remoto está apontando, em geral, o branch principal. Além disso, você pode passar o marcador em vez da ramificação para ter o mesmo efeito.

git clone -branch new_feature git://remoterepository.git

Este exemplo acima clonaria apenas a ramificação new_feature do repositório do Git remoto. É um utilitário apenas de conveniência, para poupar o tempo de baixar a referência do HEAD do repositório e, então, ainda ter que buscar a referência de que você precisa.

git clone -mirror x git clone -bare

git clone --bare

Similar ao git init --bare, quando o argumento -bare é passado ao git clone, uma cópia do repositório remoto vai ser criada com um diretório de trabalho omitido. Ou seja: um repositório vai ser configurado com um histórico do projeto que pode receber push e pull, mas não pode ser editado direto. Outro aspecto relevante é que nenhuma ramificação remota para o repositório vai ser configurada com o repositório -bare. Assim como o git init --bare, ele é usado para criar um repositório hospedado que os desenvolvedores não vão editar direto.

git clone --mirror

A transmissão do argumento --mirror também é a transmissão implícita do argumento --bare. Quer dizer que o comportamento de --bare é herdado por --mirror. O resultado é um repositório vazio sem arquivos de trabalho editáveis. Além do mais, --mirror vai clonar todas as referências estendidas do repositório remoto e manter a configuração de rastreamento da ramificação remota. Você pode então executar a atualização git remote no espelho, o que vai substituir todas as referências do repositório original. Assim você obtém uma funcionalidade "espelhada" exata.

Outras opções de configuração

Para uma lista abrangente de outras opções do git clone, visite a documentação oficial do Git. Neste documento, vamos mencionar algumas outras opções comuns.

git clone --template

git clone --template=<template_directory> <repo location>

Clona o repositório em <repo location> e aplica o template de <template directory> na ramificação local recém-criada. Uma referência extensa sobre modelos do Git pode ser encontrada na página do git init.

URLs do Git

O Git tem sua própria sintaxe de URL, que é usada para passar locais de repositório remoto para os comandos do Git. Como o git clone é mais usado em repositórios remotos, a gente vai examinar a sintaxe de URL do Git aqui.

Protocolos de URL do Git

-SSH

O Secure Shell (SSH) é um protocolo de rede autenticado onipresente que, em geral, é configurado por padrão na maioria dos servidores. Como o SSH é um protocolo autenticado, você vai precisar estabelecer credenciais com o servidor de hospedagem antes de conectar. ssh://[user@]host.xz[:port]/path/to/repo.git/

- GIT

Um protocolo exclusivo para o Git. O Git vem com um daemon que roda na porta (9418). O protocolo é semelhante ao SSH, porém NÃO TEM AUTENTICAÇÃO. git://host.xz[:port]/path/to/repo.git/

- HTTP

Protocolo de Transferência de Hipertexto. O protocolo da web, usado com mais frequência para transferir dados HTML de páginas da web pela Internet. O Git pode ser configurado para se comunicar via HTTP http[s]://host.xz[:port]/path/to/repo.git/

Resumo

Neste documento, a gente vai analisar o git clone em detalhes. Os pontos principais e mais importantes são:

1. git clone é usado para criar uma cópia de um repositório de destino

2. O repositório de destino pode ser local ou remoto

3. O Git é compatível com diversos protocolos de rede para conexão com os repositórios remotos

4. Há muitas opções de configuração diferentes disponíveis que alteram o conteúdo do clone

Para referência mais aprofundada sobre a funcionalidade do git clone, consulte a documentação oficial do Git. Exemplos práticos do git clone também são abordados no guia de configuração do repositório.

Pronto(a) para aprender Git?

Tente este tutorial interativo.

Comece agora mesmo