Artigo original: https://www.freecodecamp.org/news/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](https://www.freecodecamp.org/portuguese/news/content/images/2021/09/Screenshot-2020-06-23-at-5.47.48-AM.png)
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](https://www.freecodecamp.org/portuguese/news/content/images/2021/09/Screenshot-2020-06-22-at-2.47.53-AM.png)
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](https://www.freecodecamp.org/portuguese/news/content/images/2021/09/Screenshot-2020-06-22-at-4.51.56-AM.png)
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](https://www.freecodecamp.org/portuguese/news/content/images/2021/09/Screenshot-2020-06-23-at-5.24.43-AM.png)
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](https://www.freecodecamp.org/portuguese/news/content/images/2021/09/Screenshot-2020-06-23-at-5.28.06-AM.png)
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.
![Screenshot-2020-06-23-at-5.30.01-AM](https://www.freecodecamp.org/portuguese/news/content/images/2021/09/Screenshot-2020-06-23-at-5.30.01-AM.png)
![Screenshot-2020-06-30-at-3.27.31-AM](https://www.freecodecamp.org/portuguese/news/content/images/2021/09/Screenshot-2020-06-30-at-3.27.31-AM.png)
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.
![Screenshot-2020-06-23-at-5.31.12-AM](https://www.freecodecamp.org/portuguese/news/content/images/2021/09/Screenshot-2020-06-23-at-5.31.12-AM.png)
![Screenshot-2020-06-30-at-3.29.07-AM](https://www.freecodecamp.org/portuguese/news/content/images/2021/09/Screenshot-2020-06-30-at-3.29.07-AM.png)
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? ✌