Artigo original: Git Clone Branch – How to Clone a Specific Branch
Diferente dos sistemas de controle de versão mais antigos, como SVN e CVS, o Git é distribuído. Todo desenvolvedor possui o histórico completo e o controle de seu código no local ou remotamente. Eles também podem acessar ou manipular diversas partes do código como quiserem e de diferentes locais.
Desde que Linus Torvalds (o famoso criador do kernel do sistema operacional Linux) criou o Git em 2005 para o desenvolvimento do kernel do Linux, ele se tornou o sistema de controle de versão moderno mais utilizado do mundo.
Neste artigo, apresentarei a vocês os fluxos de trabalho de clones e branches do Git e mostrarei como você pode clonar um branch específico com base nas suas necessidades. Vamos começar?
Pré-requisitos
- Conhecimento básico do terminal
- Capacidade de digitar comandos no terminal
- Ter o Git instalado (vou mostrar como fazer aqui)
- Uma conta no GitHub
- Um sorriso no rosto (Sorriam, meus amigos)
Rápida introdução ao Git e ao GitHub
De acordo com a Wikipédia,
O Git é um sistema de controle de versão distribuído com a finalidade de acompanhar mudanças em um projeto (código) no desenvolvimento de um software. Seu objetivo é garantir a coordenação, a colaboração, a velocidade e a eficiência entre os desenvolvedores.
O GitHub, por outro lado, é um serviço de hospedagem na web para o controle de versão usando o Git. Ele oferece toda a funcionalidade do controle de versão distribuído e do gerenciamento de código fonte do Git, bem como adiciona alguns recursos a mais para o código computacional.
Como instalar o Git no Windows
Baixe a versão mais recente do instalador do Git para Windows aqui e instale-o.
Como instalar o Git no Linux
Abaixo vemos os comandos com base na sua distro do Linux:
Debian ou Ubuntu
sudo apt-get update
sudo apt-get install git
Fedora
sudo dnf install git
CentOS
sudo yum install git
Arch Linux
sudo pacman -Sy git
Gentoo
sudo emerge --ask --verbose dev-vcs/git
Como instalar o Git no Mac
Baixe a versão mais recente do instalador do Git para Mac aqui e instale-o.
Como alternativa, digite este comando:
brew install git
Agora que o Git está instalado, vamos começar o tutorial.
Conhecendo clonagem no Git
O Git permite que você gerencie e faça o versionamento de seu(s) projeto(s) em um "repositório". Este repositório é armazenado em um serviço de hospedagem na web para o controle de versão, como o GitHub.
Então, é possível clonar este repositório para sua máquina local e ter todos os arquivos e branches (ramos) no local (explicarei em breve os branches).

Por exemplo, você pode clonar o repositório do freeCodeCamp com SSH da seguinte forma:
git clone git@github.com:freeCodeCamp/freeCodeCamp.git
Conhecendo branches do Git
Ao trabalhar em um projeto, você provavelmente terá diversos features (recursos). É possível que diversos colaboradores trabalhem neste projeto e nesses recursos.
Os ramos (branches) permitem que você crie um "espaço em separado" para trabalhar com os mesmos arquivos do branch master
ou main
. Você pode usar este branch para construir branches independentes, testar novos recursos, fazer mudanças que quebrem o código, criar fixes, escrever documentos ou experimentar com novas ideias sem quebrar ou afetar o código em produção. Quando você terminar, pode fazer o merge de seu branch no branch master
ou main
de produção.
Criar ramos, ou branches, é um dos principais conceitos do Git, que também é usado no GitHub para gerenciar fluxos de trabalho de versões diferentes de um projeto. O branch master
ou main
é sempre o branch padrão em um repositório e, nele, geralmente está o que consideramos o "código da produção ou implementável". Novos branches, como passwordless-auth
ou refactor-signup-ux
, podem ser criados a partir do branch master
ou main
.

Como clonar branches do Git
Embora seja possível clonar repositórios com o comando git clone
, lembre-se de que isso clona o branch e o HEAD
remoto. Este geralmente é o master
ou o main
por padrão e inclui todos os outros branches do repositório.
Desse modo, quando você clona um repositório, está clonando o master
ou o main
e todos os outros branches. Isso quer dizer que você precisa fazer o checkout para outro branch.
Digamos que sua tarefa em um projeto é trabalhar em um recurso que adiciona a autenticação sem senha ao painel do usuário. Vamos supor que o recurso está no branch passwordless-auth
.
Você não precisa do branch master
/main
, já que será feito o merge de seu branch do recurso no master
/main
mais tarde. Como clonar, então, o branch passwordless-auth
sem pegar todos os outros branches com "um monte de arquivos dos quais você não precisa"?
Eu criei o repositório simples abaixo para explicar isso. Ele contém um blog simples construído com Nextjs e tem quatro branches dummy:
- master
- dev
- staging
- passwordless-auth
No Nextjs, qualquer arquivo dentro da pasta pages/api
é mapeado para o caminho /api/*
e será tratado como um endpoint da API em vez de ser uma page
(página). Em nosso repositório, eu criei APIs dummy diferentes neste repositório para tornar cada branch diferente.
O branch master
tem o arquivo pages/api/hello.js, enquanto passwordless-auth
tem o arquivo pages/api/auth.js. Cada arquivo retorna apenas um texto dummy como resposta. Veja a resposta da API hello do master
aqui (com uma mensagem especial para você).
Vamos clonar o repositório:
git clone git@github.com:BolajiAyodeji/nextjs-blog.git
Isso nos dá acesso a todos os branches deste repositório e você pode alternar facilmente entre cada versão e seus arquivos.
git branch -a

Quer saber de onde vieram as branches remotes/origin/..?
Ao clonar um repositório, você traz os dados de um repositório da internet ou de um servidor interno conhecido como remote, ou servidor remoto. A origem da palavra é um apelido criado pelo Git para substituir o URL remoto. Você pode mudar ou especificar outro apelido (alias), se quiser.
Esses branches remotes/origin/.. apontam de volta para o repositório de origem que você clonou da internet para que você ainda possa realizar ações de pull e de push de e para o local de origem.

Assim, quando você clona o master
em sua máquina, remotes/origin/master
é o branch master
original da internet e master
é o de sua máquina local. Desse modo, você poderá fazer pull e push de e para remotes/origin/master
.
Resumindo, Remote é o URL que aponta para o repositório da internet, enquanto Origin é um apelido (alias) para esse URL remoto.

Como clonar um branch específico
Agora, vamos clonar um branch específico de nosso repositório de demonstração. Há duas maneiras de clonar um branch específico. Você pode:
- Clonar o repositório, obter todos os branches e fazer checkout em um branch específico imediatamente.
- Clonar o repositório e fazer o fetch em apenas um único branch.
Opção um
git clone --branch <branchname> <remote-repo-url>
ou
git clone -b <branchname> <remote-repo-url>
Com isso, você faz o fetch de todos os branches no repositório, faz o checkout para o branch especificado e o branch passa a ser o branch local configurado para git push
e git pull
. Ainda assim, você fez o fetch de todos os arquivos de cada branch. Pode ser que não seja isso que você quer, correto?
Vamos testar:
git clone -b passwordless-auth git@github.com:BolajiAyodeji/nextjs-blog.git
Isso configura automaticamente passwordless-auth
como o branch local, mas ainda rastreia todos os outros branches.


Opção dois
git clone --branch <branchname> --single-branch <remote-repo-url>
ou
git clone -b <branchname> --single-branch <remote-repo-url>
Isso realiza a mesma ação que a opção um, mas a opção --single-branch
foi introduzida na versão 1.7.10 do Git e versões posteriores. Isso permite que você faça o fetch somente dos arquivos do branch especificado sem fazer o fetch de outros branches.
Vamos testar:
git clone -b passwordless-auth --single-branch git@github.com:BolajiAyodeji/nextjs-blog.git
Isso configura automaticamente passwordless-auth
como o branch local, mas rastreia apenas este branch.


Ao executar o comando cd pages/api
, você encontrará o arquivo auth.js
no branch passwordless-auth
da configuração anterior, conforme o esperado.
Conclusão
Pode ser que seu espaço de armazenamento esteja acabando ou que você tenha ficado sem internet, mas precisa trabalhar em uma tarefa em um branch específico. Também é possível que você queira clonar um branch específico com arquivos limitados por diversas razões. Felizmente, o Git garante a você a flexibilidade para fazer isso. Então, mãos à obra e faça seus experimentos. Há muita coisa a aprender sobre o Git.
Mas uma coisa de cada vez, está bem? ✌