Git clone: copiando o código fonte de um repositório!

Quando trabalhamos em um grande projeto com muitas pessoas, acabamos provavelmente utilizando o Git como nossa escolha para o versionamento dos arquivos. Com isso podemos utilizar os conceitos do Git Flow para conseguir trabalhar em pequenas funcionalidades. Com isso, a ferramenta git clone se faz útil para que possamos ter um clone do repositório em nossas máquinas.

Com o comando Git clone, conseguimos em pouco tempo localizar todo histórico de um repositório e copiá-lo para o nosso computador. No entanto, devemos tomar algumas prevenções em alguns casos, como quando clonar um repositório gigante acaba se tornando uma tarefa muito longa e espaçosa para o seu disco rígido, por exemplo.

Nesse artigo iremos lhe mostrar algumas configurações, comandos e opções sobre o Git clone, boa leitura!

O que é o Git clone e para que serve? 

Representação do que faz o Git Clone

Git clone é um dos muitos comandos do Git. Ele tem como principal proposta clonar todos os arquivos de repositório remoto para um repositório local. Por padrão, todo o histórico de commits, branches e merges são copiados também. Esse comando é muito útil para quando precisamos de uma nova cópia do projeto ou simplesmente porque queremos conferir alguns arquivos.

Para simplificar, um repositório remoto hoje em dia provavelmente está alocado em algum site famoso de Git, como o Github, GitLab e Bitbucket, etc. Sendo assim, se o repositório for público, qualquer um que esteja interessado pode clonar algum dos milhares de projetos dessas plataformas.

Um exemplo do git clone pode ser encontrado abaixo, nele é mostrado uma cópia do repositório central armazenado em um servidor com o nome de exemplo.com com o usuário do SSH fulano:

 git clone ssh://[email protected]/caminho/para/o/meu-projeto.git 
 cd meu-projeto
 # Comece a trabalhar no projeto 

O primeiro comando inicia um repositório Git novo na pasta meu-projeto na sua máquina local e a popula com os dados do servidor remoto. Então, você pode dar um cd para entrar no repositório previamente criado e começar a fazer alterações nos arquivos, commitar alterações, criar tags ou qualquer coisa do gênero. Veja que a extensão .git foi omitida no repositório clonado, isso significa que o status da cópia não é vazio.

E a segurança? Se podemos clonar, conseguiríamos também utilizar o Git push para exercer alguma alteração no devido repositório? A resposta padrão é não, contudo, existe uma espécie de autenticação para que um usuário ou usuária comum consiga fazer modificações em repositórios alheios.

Também existem outras possibilidades para isso, somos capazes de fazer um fork (uma espécie de clone do repositório) do desejado repositório e rapidamente podemos fazer as nossas próprias alterações. Ao final disso, criamos uma Pull Request para que o responsável pelo repositório reconheça as nossas alterações e faça uma análise técnica do nosso código. Com a resposta positiva, temos a inserção das nossas alterações no repositório principal.

Somos capazes também de apenas pedir autorização para o ou a gerente de DevOps, caso você esteja trabalhando em um projeto de uma empresa, por exemplo. Desse modo, com a permissão garantida, temos o potencial de utilizar os famosos comandos do Git: git pull e git push.

Principais passos na hora de clonar um repositório:

  • Clonar um repositório remoto;
  • Recuperar alterações através do git pull;
  • Autenticação com SSH ou HTTPS;
  • Mandar alterações através do git push.

Colaboração entre repositórios e cópias de desenvolvimento

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

Já com o projeto configurado no repositório central, utilizamos o comando git clone para obtermos a cópia de desenvolvimento. Com essa cópia, a pessoa desenvolvedora obtém todas as operações e colaborações do controle de versão gerenciáveis a partir do repositório local.

A partir disso, podemos gerenciar o nosso próprio projeto sem nenhuma ligação com repositório remoto. Caso seja necessário, podemos recuperar algumas informações a partir do git pull. Por fim, devemos entender que esse comando cria uma cópia exata de um repositório.

Se você já trabalhou com algum repositório SVN, já deve ter ouvido falar do termo “working copy”, em português “cópia de trabalho”. Na arquitetura do SVN, temos a ideia que o repositório remoto é o repositório central e que todas as alterações devem ser mandadas de uma cópia do trabalho. Diferentemente, o Git tem a proposta de criar vários repositórios centrais nas máquinas locais, isso por meio da arquitetura dessa ferramenta.

Dessa maneira, percebemos que o fluxo de trabalho do Git é muito mais flexível do que o adotado pelo SVN, já que isso significa que temos uma grande margem para alterações nesse fluxo, conseguindo até mesmo implementar o fluxo de repositório único do SVN. O ponto é, o Git é muito maleável para alterações e, com pequenos passos, conseguimos fazer diversos tipos de fluxos.

Conheça algumas configurações do Git clone

Logo abaixo temos algumas configurações para ajudar você a clonar um repositório:

git clone -branch

Com o argumento -branch conseguimos especificar uma branch que gostaríamos de clonar, já que por padrão a cópia é feita a partir da branch principal do repositório. Além do mais, podemos especificar uma tag ao invés de uma branch.

git clone -branch nova_funcionalidade git://repositorioremoto.git

Por meio desse comando, colocaríamos a branch “nova_funcionalidade” do repositório remoto. Essa funcionalidade tem o propósito de agilizar o processo de troca de branches a partir de um novo projeto, já que de qualquer forma é bem custoso clonar um repositório e ainda ter que buscar a branch ou tag que você deseja.

git clone –mirror

Esse comando tem a funcionalidade de clonar um repositório que você não pode editar, isso é, você não consegue mudar nenhuma referência, branches e arquivos. Pode ser utilizado para ter como base na hora da criação de um novo repositório, ou ainda, quando utilizamos o Git para executar testes automatizados em nosso projeto.

git clone –bare

Utilizamos esse comando quando não queremos trabalhar com repositórios remotos. Dessa forma, quando o repositório é clonado, não conseguimos obter ou enviar alterações de código. É possível ser usado para testar repositórios sem a preocupação de fazer commits indesejados para o repositório central. 

git clone –template

Serve para clonar um template qualquer em algum diretório local. É muito utilizado para a clonagem de projetos Boilerplates. Caso não saiba, um código Boilerplate é quando um repositório contém uma estrutura inicial de um projeto. Com isso temos a chance de clonar esse código e fazer as devidas alterações para a nossa situação.

git clone --template=<diretório do template> <localização do repositório>

Opções para usar com Git clone 

Agora veremos algumas opções que podem ser úteis para o seu dia-a-dia, caso tenha tenha interesse em aprofundar em algum, dê uma olhada na documentação oficial do Git:

Otimizando o seu repositório: git clone –sparse

Em vez de popular a pasta de trabalho com todos os arquivos do commit de modo recursivo, o comando apenas o enche com os arquivos do diretório da raiz. É de certa forma útil para melhorar a performance de projetos com muitas pastas e subdiretórios.

Clonando superficialmente: git clone -depth

Esse comando clona um repositório e a partir do parâmetro depth temos a quantidade dos commits mais recentes que queremos obter. Como no exemplo a seguir, temos que depth tem o valor de 1, logo a clonagem do repositório vai ter apenas o último registro do histórico do projeto.

git clone -depth=1 <repositório>

Esse comando é muito utilizado para repositórios grandes e extensos, com ele conseguimos economizar espaço do nosso disco rígido e tempo nas operações do Git. Também podemos chamar esse método de Shallow clone.

Clonando submódulos: git clone –recurse-submodules[=<pathspec>]

Logo depois que a clonagem é criada, é iniciado e clonado os submódulos que são providenciados no parâmetro pathspec.

 git clone --recurse-submodules git://repositorioremoto.com/repo.git

Essa é uma excelente opção se você está clonando um repositório que você sabe que tem submódulos, com isso você consegue trabalhar de forma mais rápida com eles como dependência no seu desenvolvimento local.

Clonando apenas uma branch: git clone –single-branch

git clone [url] --branch [branch] --single-branch

Por padrão, o comando git clone vai deixar um rastreio em todas as branches remotas do nosso repositório clonado. Com essa opção, temos a opção de clonar apenas uma branch do repositório. Por padrão a branch master vai ser clonada, no entanto, você pode especificar outra branch ou até mesmo várias branches.

Esse comando é recomendado para repositórios com muitos arquivos pesados que acabam deixando a performance do repositório lento, com ele trazemos de volta um pouco da velocidade e economizamos algum espaço na memória.

URLS de protocolos remotos Git

O Git em si tem a sua própria maneira de passar a localização de repositórios remotos para os seus comandos internos. Já que o git clone é usado majoritariamente em repositórios remotos, nós vamos examinar os seus 5 protocolos para url remotas.

SSH protocolo remoto

Exemplo de protocolos remotos git clone

Secure Shell ou SSH é um protocolo de rede autenticado amplamente utilizado que é configurado por padrão em repositórios remotos. Como esse protocolo é autenticado, precisamos ter credenciais para que o servidor nos permita fazer a conexão.

O formato de conexão do SSH é ssh://{usuário}@{hospedeiro}:{porta}/caminho/para/o/repositório.git ou também {usuário}@hospedeiro:caminho/para/o/repositório.git.

Para utilizar esse tipo de autenticação, você precisa gerar uma chave SSH pública e privada localmente, adicionar a chave privada para o seu agente SSH e por fim adicionar a chave pública para o serviço remoto.

Git protocolo remoto

O mais simples de todos os protocolos, o protocolo remoto do Git, não tem nenhum método de autenticação e deve ser sempre utilizado com precaução

O formato da url é git://{hospedeiro}:[porta]/caminho/para/o/repositório.git

HTTP(S) protocolo remoto

HTTP(S) significa Hyper Text Transfer Protocol (Secure), em português Protocolo de transferência de hipertexto (seguro). Com o auxílio do HTTPS, podemos autenticar repositórios com usuário e senha.

Comparado com o HTTP, o HTTPS é mais seguro.

O formato da url é

https://{hospedeiro}:{porta}/caminho/para/o/repositório.git

FTP protocolo remoto

Por fim, também é possível utilizar as urls com o FTP, no entanto essa tecnologia já não é mais recomendada por ser ineficiente e obsoleta.

O formato da sua url é

ftp[s]://{hospedeiro}[:porta]/caminho/para/o/repositório.git.

Git clone é um dos comandos principais de toda a ferramenta Git, com ele podemos clonar um repositório de maneira fácil e partir para o desenvolvimento remoto. Com as diversas opções e configurações, conseguimos elevar o nível e adquirir novas funções. Um exemplo que vem ganhando muita notoriedade nos últimos tempos é a questão de template — nessa pequena configuração conseguimos clonar de um repositório template para um repositório local vários arquivos pré-moldados e que facilitarão possíveis desenvolvimentos.

Além do mais, aprendemos a otimizar repositórios com um longo histórico de commits e de clonar inicialmente os submódulos de um repositório. Chegamos também a entender os principais formatos de url usados como protocolos remotos para o Git.Esperamos que você tenha compreendido um pouco mais das funcionalidades do Git clone lendo esse post!

Se gostou do texto, continue lendo sobre o Git config: como configurar seus repositórios?