Articolo originale: Git Clone Branch – How to Clone a Specific Branch

A differenza di sistemi di controllo centralizzati più vecchi come SVN o CVS, Git è distribuito. Ogni sviluppatore ha tutta la storia e il controllo del loro codice in locale o in remoto. Possono anche avere accesso o manipolare varie parti del codice come desiderano da diversi posti.

Da quando Linus Torvalds (il famoso creatore del kernel del sistema operativo Linux) lo ha creato nel 2005 per lo sviluppo del kernel di Linux, Git è diventato il sistema di controllo di versione più usato nel mondo.

In questo articolo ti introdurro ai comandi clone e branch e ti mostrerò come puoi clonare uno specifico branch a seconda delle tue necessita. Andiamo!

Prerequisiti

  • Un minimo di conoscenza con il terminale
  • Abilità di digitare i comandi nel terminale
  • Avere Git installato (ti mostrerò come)
  • Un account GitHub
  • Un sorriso (Sorridi, amico mio!)

Breve introduzione a Git e GitHub

Wikipedia dice che,

Git è un sistema distribuito di controllo di versione progettato per tenere traccia di cambiamenti in un progetto (codice) nello sviluppo di software. Ha lo scopo di forzare coordinazione, collaborazione, velocità ed efficienza tra i programmatori.

GitHub, d'altra parte, è un servizio di hosting sul web per il controllo di versione usando Git. Offre tutte le funzionalità di controllo distribuito di versione e gestione del codice di Git oltre ad aggiungere altre funzioni per il codice del computer.

Come installare Git su Windowsì

Scarica e installa l'ultimo Git for Windows Installer qui.

Come installare Git su Linuxù

Ecco i comandi basati sul tuo distro di Linux:

Debian o 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

Come installare Git su un Mac

Scarica e installare l'ultimo Git for Mac installer qui.

Oppure puoi usare questo comando:

brew install git

Ora che abbiamo installato Git, andiamo avanti col tutorial.

Introduzione a Git Clone

Git ti permette di gestire e fare versioni di un tuo progetto in un "repository", ospitato in un servizio web di hosting per il controllo di versione come GitHub.

Puoi quindi clonare questo repository alla tua macchina e avere tutti i file e i branch in locale (ti spiegherò tra poco dei branch).

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

Per esempio puoi clonare il repository di freeCodeCamp con SSH in questo modo:

git clone git@github.com:freeCodeCamp/freeCodeCamp.git

Introduzioni ai branch di Git

Quando lavori su un progetto avrai di sicuro diverse features. E vari contributori che lavorano sul progetto e le sue features.

I branch ti permettono di creare un playground con gli stessi file che ci sono nel branch master (nota del traduttore: a oggi, il branch principale è più comunemente chiamato main). Puoi usare questo branch per creare features indipendenti, sistemare bug, scrivere documentazione o provare idee senza toccare il codice di produzione. Quando hai fatto, unisci il branch nel branch di produzione master.

Creare branch è un concetto fondamentale di Git, usato anche da GitHub per gestire il flusso di lavoro di diverse versioni dello stesso progetto. Il branch master è sempre il branch di default di un repository che è spesso considerato "codice di produzione e distribuibile". Nuovi branch come passwordless-auth o refactor-signup-ux possono essere creati dal branch master.

Screenshot-2020-06-22-at-2.47.53-AM
Tutti i branch nel repisotory di freeCodeCamp

Come clonare i branch di Git

Anche se puoi clonare i repositoru con il comando git clone, tieni a mente che questo clona il branch e l'HEAD remoto. Il quale in genere è master di default e include tutti gli altri branch nel repository.

Quindi quando cloni un repository, cloni master e tutti gli altri branch. Questo significa che dovrai spostarti su un altro branch per conto tuo.

Diciamo che hai il compito di aggiungere la feature di autenticazione senza password ad un dashboard. E questa feature è nel branch passwordless-auth.

Non hai bisogno del branch master visto che il tuo "branch di feature" verrà unito a master dopo. Quindi come cloni questo branch passwordless-auth senza prendere anche gli altri branch con "un mucchio di file che non ti servono"?

Ho creato questo reposutory di esempio per spiegare ciò. Questo repository contiene un semplice blog costruito con Nextjs e ha 4 branch fittizie:

  • master
  • dev
  • staging
  • passwordless-auth

In Nextjs, qualsiasi file dentro pages/api è mappato al percorso /api/* e verrà trattato come un endpoint API invece di una pagina. Nel nostro repository ho creato API fittizie in questa directory per rendere ogni branch differente.

Il branch master ha il file pages/api/hello.js mentre passwordless-auth contiene il file pages/api/auth.js. Ogni file ritorna una risposta fittizia in forma di testo. Vedi la risposta dell'API hello in master qui (con un messaggio speciale per te).

Cloniamo questo repository:

git clone git@github.com:BolajiAyodeji/nextjs-blog.git

Questo ci da accesso a tutti i branch in questo repository e puoi spostarti facilmente tra i vari branch oer vedere ogni versione con i suoi file.

git branch -a
Screenshot-2020-06-22-at-4.51.56-AM

TI stai chiedendo da dove vengono i branch remotes/origin/.. ?

Quando cloni un repository, prendi i wdati da un repository in internet o un server interno noto come remote. La parola origin è un alias creato dal tuo Git per rimpiassare l'URL remoto (puoi cambiare o specificare un diverso alias se vuoi).

Questi branch remotes/origin/.. puntano al repository originale dal quale hai clomato quindi puoi comunque fare pull/push dall'origin.

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


Quindi quando cloni master sulla tua macchina, remotes/origin/master è il branch master originale nell'internet, e master è nella tua macchina locale. Quindi farai pull/push da e a remotes/origin/master.

In breve Remote è l'URL che punta al repository nell'internet mentre Origin è un alias per questo URL remoto.

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

Come clonare un Branch specifico

Ora cloniamo un branch specifico dal nostro repository dimostrativo. Ci sono due modi per clonare un branch specifico. Puoi:

  • Clonare il repository, fetch tutti i branch, e checkout a un branch specifico immediatamente.
  • Clonare il repository e fetch un singolo branch.

Prima opzione

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

o

git clone -b <branchname> <remote-repo-url>
Here -b is just an alias for --branch


Con questo, richiedi tutti i branch del repository, ti sposti su quella che hai specificato, e il branch specificato diventa configurato in locale per git push e git pull. Ma hai comunque ottenuto tutti i file da ogni branch. Questo potrebbe non essere quello che vuoi, giusto?

Testiamolo:

 git clone -b passwordless-auth git@github.com:BolajiAyodeji/nextjs-blog.git

Questo automaticamente configura passwordless-auth come branch locale ma comunque tiene traccia degli altri branch.

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

Seconda opzione

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

o

git clone -b <branchname> --single-branch <remote-repo-url>
Here -b is just an alias for --branch

Questo esegue la stessa azione dell'opzione uno, tranne che l'opzione --single-branch è stata introdotta in Git versione 1.7.10 e successive. Permette di ottenere i file solo del branch specificato senza i file degli altri branch.

Testiamolo

git clone -b passwordless-auth --single-branch git@github.com:BolajiAyodeji/nextjs-blog.git

Questo configura automaticamente passwordless-auth come branch locale e tiene traccia solo di questo branch.

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

Se esegui cd pages/api troverai il file auth.js nel branch passwordless-auth come ci aspettiamo dallo step precedente.

Conclusione

Potresti star finendo il traffico dati o la memoria sul tuo computer ma devi lavorare su qualcosa in un branch specifico. O potresti voler clonare un branch speficifico con file limitati per varie ragioni. Fortunatamente, Git provvede la flessibilità per farlo. Contrai i muscoli e provalo, c'è molto altro "Git" da imparare.

Una cosa alla volta, yeah?