Questo sito contribuisce alla audience di Il Messaggero
Scopri le migliori offerte sul canale Telegram ufficiale. Guarda su Telegram

Come funziona Git

di

Dopo tanti sforzi e sacrifici hai finalmente ottenuto il tuo primo lavoro come programmatore all’interno di una nota azienda o hai deciso di metterti in proprio con degli amici e creare una società dedicata alla creazione di software informatico. Tuttavia, molti dei tuoi colleghi lavorano da casa in remoto e si collegano ai progetti utilizzando il software Git, un sistema di gestione per le versioni di un progetto tramite riga di comando.

Girando per la rete sei riuscito a trovare delle guide che, per quanto approfondite, non riescono a fornire le principali informazioni a un livello abbastanza basso da essere comprensibili ai programmatori inesperti e alle prime armi. Niente panico, a questo ci penserò io. Nel corso delle prossime righe ti mostrerò tutte le nozioni base necessarie per utilizzare al meglio questo utile strumento, e metterti fin da subito in pari con il lavoro dei tuoi colleghi.

Girando per la rete sei riuscito a trovare delle guide che, per quanto approfondite, non riescono a fornire le principali informazioni a un livello abbastanza basso da essere comprensibili ai programmatori inesperti e alle prime armi. Niente panico, a questo ci penserò io. Nel corso delle prossime righe ti mostrerò tutte le nozioni base necessarie per utilizzare al meglio questo utile strumento, e metterti fin da subito in pari con il lavoro dei tuoi colleghi.

Indice

Informazioni preliminari

Loghi Git e GitHub

Prima di entrare nel vivo della guida, bisogna partire da un’infarinatura generale tramite qualche cenno storico. Devi sapere infatti che Git è nato nel 2005 dalla mente di Linus Torvald, che concepì il software come un sistema di controllo per il codice sorgente del kernel di Linux tra i volontari sparsi in tutto il mondo. Proprio per questa ragione, Git è in grado di gestire l’organizzazione e le modifiche di un progetto informatico in pochi secondi. Oltre a questo, Git ti permette anche di lavorare senza utilizzare una connessione a internet, dando quindi anche a quegli utenti sempre in giro tra una città e l’altra la possibilità di aggiornare periodicamente i propri progressi sul codice, sincronizzandole con quelle dei propri colleghi una volta collegato alla rete. Come vedrai tra poco, Git è comunque un sistema complesso e pieno di comandi da imparare a utilizzare.

Sicuramente leggendo il nome Git ti sarà tornato in mente il nome di un noto sito molto visitato dai programmatori: GitHub. Se ti stai domandando se il software abbia qualche correlazione con il sito, sappi che la risposta è un po’ complicata. Se da un lato molte delle funzionalità di gestione del codice sorgente presenti in Git siano integrate all’interno del sito di GitHub, quest’ultimo è considerato come un servizio di hosting che permette agli utenti da tutto il mondo di caricare e condividere i propri progetti. Inoltre, i due progetti sono gestiti da ben due entità differenti. Git è infatti stato creato come progetto open source sviluppato sotto Linux, mentre GitHub è un sito al momento sotto proprietà di Microsoft, utilizzando la tecnologia open source come capostipite del proprio servizio.

Come installare Git

Download Git

Prima di immergerti nel suo corretto funzionamento, dobbiamo ovviamente installare git sul tuo computer e impostarlo correttamente. Git è un software disponibile in diversi sistemi operativi come Windows, macOS e Linux. In questa guida, ci concentreremo sul coprire l’installazione sulle prime due piattaforme.

Per installare Git su Windows, collegati al sito ufficiale di git, raggiungi la sezione Downloads, clicca sul logo di Windows e seleziona la versione del programma di installazione giusta scegliendo tra 32 e 64 bit. Una volta scaricato il file Git-versione-bit.exe, raggiungi la cartella d’installazione e apri il file cliccando due volte sulla sua icona. Conferma l’apertura del file d’installazione premendo sul tasto e avvia la procedura d’installazione di Git. Ti troverai davanti a una schermata dalla quale dovrai cliccare sul tasto Next, accettare le regole della Licenza GPL cliccando su I agree e successivamente scegliere i componenti aggiuntivi da includere nell’installazione, tra interfacce grafiche e configurazioni del prompt di sistema e dell’emulatore BASH, seleziona Next per andare avanti e infine clicca su Install per iniziare l’installazione.

Se sei interessato a installare Git su macOS invece, devi sapere che l’intero sistema di gestione del progetto è supportato nativamente dal sistema operativo di casa Apple grazie a Xcode, ambiente di sviluppo per macOS e iOS/iPad OS e che tra i tanti linguaggi di programmazione include anche Git. Una volta scaricato e installato il programma dalla pagina dedicata dell’Mac App Store, apri le impostazioni del programma e seleziona la scheda Source Control. Da questa schermata, metti la spunta sulla voce Enable Source Control. A questo punto, seleziona la voce Git e inserisci un nome e un indirizzo email, in modo da identificare i file che andrai a “firmare” all’interno del progetto condiviso.

Una volta installato, Git sarà utilizzabile ogni volta che vorrai utilizzando il prompt dei comandi di Windows e macOS.

Come usare Git

Ora che hai installato il software di Git, è arrivato il momento di imparare le basi sul suo utilizzo. Nei prossimi capitoli infatti, ti mostrerò le principali funzioni con cui avrai a che fare durante una comune giornata di lavoro nel mondo dello sviluppo di codici sorgente. Per questa guida, ti fornirò anche esempi di codice che potrai copiare e riutilizzare come esempio, in modo da avere dei riferimenti più specifici e dettagliati da poter confrontare con quanto andrai a replicare nella pratica.

Creare un repository su Git

creazione repository Git

Con repository (traduzione di deposito o ripostiglio) si intende un ambiente di sistema in grado di gestire il flusso di controllo di una grande mole di dati. Per crearlo, non dovrai fare altro che aprire il terminale, entrare nella cartella del progetto utilizzando il comando “cd” e successivamente usare il comando “git init”.


cd /utente/nome/cartella
$ git init

In alternativa, se vuoi iniziare a lavorare su un repository già creato da un collega, puoi utilizzare il comando “git clone” assieme all’indirizzo o posizione in cui il progetto è stato caricato. In questo modo il software di Git scaricherà il progetto all’interno della cartella desiderata.


cd /utente/nome/cartella
git clone progetto.git

Seguendo queste indicazioni, verrà creato un nuovo file .git all’interno della tua cartella, necessario per la gestione del repository tramite Git.

Gestire file su Git

gestione file Git

Una volta creato il tuo repository, è arrivato il momento di gestire i file su Git in tutti i suoi aspetti, dall’aggiunta al progetto, fino alla modifica o alla sua cancellazione. Per prima cosa, inserisci un nuovo file all’interno della cartella, creando un nuovo file, oppure utilizzando la funzione di copia e incolla. Fatto questo, apri il terminale e inserisci il comando “git status”. Tramite questo comando, il sistema riconoscerà il nuovo file all’interno della cartella del progetto, e ti suggerirà di inserirlo nel repository utilizzando il comando “git add”.


$ git status
# On branch master
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# nuovo_file.txt

$ git add nuovo_file.txt

Nel caso uno dei file all’interno del repository venga modificato, dovrai ancora una volta utilizzare il comando “git status” per tracciare il cambiamento dei contenuti nel file, che verrà catalogato con il termine changes not staged for commit.


$ git status
# On branch master
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: nuovo_file.txt

Con changes not staged for commit si intendono quei file sì modificati ma ancora non inseriti effettivamente all’interno del repository. Per inserirlo, dovrai usare ancora una volta il comando “git add”. In questo modo, i cambiamenti verranno convalidati e il file sarà leggibile all’interno del comando “git status” come changes to be committed.


$ git add nuovo_file.txt

$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# modified: nuovo_file.txt

Siccome Git è un software per la gestione delle versioni di un particolare progetto, la modifica e l’inserimento di un file all’interno di un repository dovranno essere inserite manualmente ogni volta seguendo la procedura che ti ho illustrato. Una volta inserite le modifiche più opportune, è arrivato il momento di salvare le modifiche su git utilizzando il file “git commit -m”. Tramite questo comando avrai la possibilità non solo di salvare i progressi all’interno del progetto, ma anche inserire un messaggio di notifica nel quale specificare i cambiamenti effettuati all’interno del file.


$ git commit -m "Questo è il primo commit"

Ma cosa fare nel caso tu volessi cancellare un file su Git? Niente di più semplice. Tutto quello che dovrai fare è utilizzare il comando “git rm” affiancato al nome del file e successivamente utilizzare di nuovo “git status” per convalidare la cancellazione. Nel caso dei file già inseriti in fase di “commit” invece, dovrai utilizzare il comando “git rm –cached”.


$ git rm file_da_togliere.txt
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# deleted: file_da_togliere.txt

$ git rm --cached file_da_togliere.txt

Infine, nel malaugurato caso che qualcosa andasse storto al punto da compromettere l’integrita di uno o più file all’interno del repository, niente panico c’è una soluzione anche per quello. Utilizzando infatti il comando “git revert” potrai infatti ripristinare su Git una versione precedente di una delle commit presenti all’interno del repository, sostituendola automaticamente a quella danneggiata e ormai compromessa. Si tratta di un piccolo trucchetto per evitare di cancellare del tutto una commit e costringerti a ripetere tutta l’operazione di inserimento e convalida da zero.

Creare un branch su Git

Funzionamento branch Git

Un altro aspetto importante del lavorare su Git riguarda le ramificazioni o branch, ovvero quelle parti di un repository distaccate dal flusso di lavoro principale nel quale gli utenti possono sperimentare nuove aggiunte o variazioni al codice sorgente senza però andare a intaccare la versione principale, detta anche master. Creare un nuovo branch all’interno di un repository è molto semplice, basta infatti utilizzare il comando “git branch” e affiancarlo a un nome e premere invio per confermare.


$ git branch prova

In questo modo avrai creato un branch senza però entrare fin da subito all’interno della ramificazione. Quest’ultima operazione potrà essere effettuata utilizzando il comando “git checkout”; utilizzando questo comando, farai capire al sistema che in quel preciso momento vuoi lavorare all’interno di quello specifico branch. Allo stesso modo, scrivendo “git checkout master” tornerai in automatico all’interno del branch principale del repository.


$ git checkout prova
Switched to branch 'prova'

$ git checkout master
Switched to branch 'master'

E nel caso tu volessi cancellare un branch? Anche in questo caso, Git permette di compiere questa azione in pochissimo tempo. Non dovrai fare altro che utilizzare il comando git branch -d. Ma attenzione, nel caso questo ramo abbia già dei commit all’interno del repository, Git chiederà di effettuare un’ulteriore conferma di cancellazione tramite il comando “git branch -D”. La differenza sostanziale tra le due opzioni sta nella lettera “d minuscola” e “D maiuscola”, con quest’ultima che viene utilizzata per oltrepassare le misure di sicurezza del sistema.


$ git branch -d prova
error: The branch 'test' is not fully merged.
If you are sure you want to delete it, run 'git branch -D test'.

$ git branch -D prova

Infine, vorrei proporti un piccolo esempio: immagina di aver lavorato all’interno del branch “prova” e che un tuo superiore abbia revisionato le modifiche da te apportate, convalidandole e invitandoti a integrarle all’interno del branch “master”. Come effettuare questa unione di branch su Git? Molto semplice: si utilizza il comando “git merge”, affiancandolo al nome del branch da unire e confermando l’operazione premendo il tasto Invio. In
alternativa, soprattutto quando si lavora con più persone all’interno dello stesso repository, puoi usare il comando git merge –no-ff e creare un commit che faccia da annotazione che avvisi gli altri utenti della “fusione” delle ramificazioni.


$ git merge prova

$ git merge --no-ff prova

Lavorare in remoto su Git

Lavoro in remoto Git

Come detto all’inizio di questa guida, uno dei principali vantaggi di Git è quello di facilitare il lavoro tra più utenti in qualunque luogo, situazione e computer anche tramite la propria connessione internet per connettersi, accedere ad altri repository e lavorare in remoto su Git. E come vedrai in quest’ultima sezione, tutto questo sarà possibile in pochi e semplicissimi passi.

Per prima cosa bisogna aggiungere un repository su Git e questo può essere fatto sempre tramite il singolo comando “git remote add”, affiancando a quest’ultimo un nome o il link in cui il repository in remoto è stato caricato. L’utilizzo di un nome permette inoltre di richiamare in un secondo momento il repository in remoto, utilizzando il comando “git remote rm” e collegarti subito senza il bisogno di ritrovare il link specifico.


$ git remote add nome link_repository

$ git remote rm nome

Una volta collegato al repository in remoto, i dati di quest’ultimo potranno essere scaricati all’interno del branch remoto senza andare a intaccare la stabilità e il corretto funzionamento delle ramificazioni salvate il locale. Prima di tutto, utilizza il comando “git fetch” seguito dal nome del repository in remoto per visualizzare lo status dei contenuti al suo interno. Dopodiché, utilizza il comando “git merge” per integrarli all’interno del tuo repository locale.


$ git fetch repo_remoto

$ git fetch repo_remoto nome_branch

Ancora meglio, è possibile utilizzare un singolo comando per integrare le funzioni di fetch e merge in una singola operazione e ottimizzare il flusso di lavoro. Per farlo, utilizza il comando git pull indicando il nome del repository in remoto e della sua eventuale branch. In questo modo, non solo potrai visualizzare i file presenti nel repository selezionato, ma questi ultimi verranno scaricati in modo automatico.


$ git pull repo_remoto nome_branch

Una volta che avrai effettuato le modifiche necessarie e vorrai condividerle all’interno del repository remoto, il sistema ti darà la possibilità di caricare su Git i progressi fatti utilizzando il comando “git push”, che trasferirà tutti i commit fatti e renderà il lavoro visibile a tutti gli altri utenti.


$ git push repo_remoto nome_branch

Come approfondire git

Approfondimento Git

Fino a questo momento, ti ho mostrato le principali nozioni base sull’uso di git in modo da iniziare fin da subito a prendere familiarità con il sistema. Ciononostante, una semplice guida non basta a racchiudere anni e anni di esperienza e pratica. Per questo, ho qui per te una serie di risorse aggiuntive alle quali puoi attingere per approfondire lo studio di Git e del suo funzionamento. Come primo esempio, ti consiglio caldamente di consultare la documentazione ufficiale di Git per ottenere un riscontro immediato utilizzando ciò che viene fornito dallo sviluppatore del programma.

In alternativa, puoi dare un’occhiata alle centinaia di video tutorial e lezioni online consultabili su YouTube (es. la serie di video di 00Developer) , da sempre sito ricco di ottime risorse per mettere in pratica quanto scoperto qui e trasformare le nozioni base in conoscenze utili per il tuo lavoro. In alternativa, puoi anche consultare svariate guide cartacee da utilizzare come glossario da leggere in ogni momento in caso di problemi o dubbi. Tra i tanti che vedrai qui sotto, ti consiglio “Git. Guida per imparare a gestire, distribuire e versionare codice” di Ferdinando Santacroce e “Git Pocket Guide” di Richard E. Silverman nel caso tu voglia consultare le risorse in lingua inglese e confrontarti con la community internazionale.

Git. Guida per imparare a gestire, distribuire e versionare codice
Vedi offerta su Amazon
Git Pocket Guide
Vedi offerta su Amazon
Pro Git
Vedi offerta su Amazon
Head First Git: A Learner's Guide to Understanding Git from the Inside...
Vedi offerta su Amazon

In qualità di affiliati Amazon, riceviamo un guadagno dagli acquisti idonei effettuati tramite i link presenti sul nostro sito.

Salvatore Aranzulla

Autore

Salvatore Aranzulla

Salvatore Aranzulla è il blogger e divulgatore informatico più letto in Italia. Noto per aver scoperto delle vulnerabilità nei siti di Google e Microsoft. Collabora con riviste di informatica e cura la rubrica tecnologica del quotidiano Il Messaggero. È il fondatore di Aranzulla.it, uno dei trenta siti più visitati d'Italia, nel quale risponde con semplicità a migliaia di dubbi di tipo informatico. Ha pubblicato per Mondadori e Mondadori Informatica.