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).

Screenshot-2020-06-23-at-5.47.48-AM

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.

Screenshot-2020-06-22-at-2.47.53-AM
Todos os branches no repositório do freeCodeCamp

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
Screenshot-2020-06-22-at-4.51.56-AM

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.

Screenshot-2020-06-23-at-5.24.43-AM

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.

Screenshot-2020-06-23-at-5.28.06-AM

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>
Aqui, -b é apenas um alias para --branch


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.

Screenshot-2020-06-23-at-5.30.01-AM
Screenshot-2020-06-30-at-3.27.31-AM

Opção dois

git clone --branch <branchname> --single-branch <remote-repo-url>

ou

git clone -b <branchname> --single-branch <remote-repo-url>
Aqui, -b é apenas um alias para --branch

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.

Screenshot-2020-06-23-at-5.31.12-AM
Screenshot-2020-06-30-at-3.29.07-AM

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? ✌