Tutorial Git: primi passi con il sistema di controllo delle versioni
Lo sviluppo congiunto di progetti software non si verifica solo all’interno delle aziende: anche nel settore open source, a seconda delle dimensioni del progetto, da diverse centinaia a migliaia di volontari partecipano alla manutenzione, ottimizzazione, sviluppo e modifica di un programma. Senza un adeguato sistema di registrazione e controllo delle numerose modifiche da parte dei diversi sviluppatori tali progetti difficilmente potrebbero essere realizzati.
Una delle soluzioni più popolari per il controllo di versione è il tool Git non soggetto a licenza, semplice da imparare e completamente gratuito. In questo tutorial vi forniremo tutte le nozioni di base di Git necessarie per iniziare con il programma di controllo delle versioni.
- Certificato SSL Wildcard incluso
- Registrazione di dominio sicura
- Indirizzo e-mail professionale da 2 GB
Che cos’è Git?
Git è un sistema di controllo versione sviluppato nel 2005 dal creatore di Linux, Linus Thorvalds, e rilasciato sotto licenza GNU-GPLv2 gratuita. La particolarità dello strumento è che sebbene esista un repository centrale per ciascun progetto, tutti gli utenti coinvolti scaricano una copia locale di lavoro di questa directory sul proprio dispositivo di lavoro. Ognuna di queste copie rappresenta un back-up completo del repository, per cui non è necessaria una connessione di rete continua per il processo di lavoro di base. Inoltre le copie fungono da back-up nel caso in cui la directory principale non dovesse funzionare o è danneggiata. Le modifiche effettuate possono essere condivise in qualsiasi momento con tutti gli altri partecipanti al progetto e, se opportuno, possono essere inserite nel repository.
Una delle alternative a Git più conosciute è il tool Subversion, anch’esso open source, meglio noto come SVN, che a differenza di Git si basa su un sistema centrale di controllo. Nell’articolo "Git vs. SVN - Controllo di versione a confronto" scoprirete le analogie e le differenze di questi due strumenti.
Ecco come installare Git sul vostro dispositivo
Chi desidera apprendere la gestione del software con Git dovrebbe innanzitutto familiarizzare con il software e la relativa interfaccia utente. Git è disponibile per Windows, Unix/Linux e macOS, tenendo conto che le diverse versioni si differenziano leggermente tra loro per quanto riguarda il funzionamento. Dopo l’installazione standard potete controllare lo strumento, indipendentemente dalla piattaforma, sia con l’interfaccia a riga di comando che con un’interfaccia utente grafica.
Per poter utilizzare i comandi citati più avanti in questo tutorial Git, gli utenti di Windows dovrebbero eseguire il sistema di controllo versione tramite Git-Bash, la shell in stile Unix inclusa nell’installazione. In alternativa è anche possibile controllare il software con il prompt dei comandi o tramite il terminale di Windows, anche se qui la struttura dei parametri dei comandi funziona diversamente (ad esempio virgolette doppie invece di virgolette singole).
Sull’homepage del progetto Git si trovano file di installazione binari, istruzioni per l’installazione del gestore pacchetti (sistemi Unix) e edizioni portatili pronte all’uso per i singoli sistemi. È sufficiente scaricare il pacchetto desiderato o utilizzare il pacchetto giusto della gestione pacchetti e seguire le istruzioni della procedura guidata di installazione. L’edizione portatile non prevede l’installazione.
Nella sezione dei download di git-scm.com la community Git mette a vostra disposizione varie interfacce grafiche alternative per il gestore delle versioni. Lì trovate anche i client Git per Android e iOS che consentono l’utilizzo dello strumento open source sul vostro dispositivo mobile.
Tutorial Git: come lavorare con Git passo dopo passo
Una volta installato Git sul vostro sistema, potrete utilizzarlo per la gestione dei vostri progetti. Ma come con qualunque software è necessario innanzitutto conoscere le funzioni e i comandi elementari per trarre il massimo beneficio dall’applicazione. Nell’ambito del nostro tutorial per principianti illustreremo i passaggi chiave della configurazione di Git e del suo funzionamento tramite la riga di comando, in modo che in seguito possiate configurare e controllare facilmente il vostro repository.
Dal 2015 è noto che un’errata configurazione di Git o del server web utilizzato per il repository del sistema di controllo delle versioni li rende accessibili pubblicamente tramite browser. È sempre il caso quando una directory Git si trova nella root del server, il che dovrebbe essere evitato a tutti i costi. Non memorizzate mai i vostri repository Git nella root o, in alternativa, configurate il vostro server web in modo che l’accesso alla directory .git sia impossibile a terzi non autorizzati. Una descrizione dettagliata del problema e le istruzioni su come risolvere questo problema con Git nei server web più comuni si trovano sul sito della fondazione Internetwache.org.
Creare o clonare il repository Git
Il repository Git è la directory centrale di un progetto gestito e quindi anche il punto di contatto centrale per tutti i partecipanti, attraverso il quale viene regolamentato il controllo completo della versione. Pertanto il vostro primo passo in Git è creare una directory principale o clonarla (sotto forma di una copia di lavoro) se aderite a un progetto il cui sviluppo congiunto è controllato con l’ausilio di Git.
Se desiderate configurare nuovamente il controllo di versione o avete semplicemente installato lo strumento per imparare a lavorare con Git, conviene innanzitutto ricostituire un repository. Per far questo utilizzate “cd” (change directory) per passare alla directory locale desiderata sul vostro dispositivo:
cd percorso individuale di directory
- Certificato SSL e protezione DDoS
- Velocità, flessibilità e scalabilità
- Dominio e consulente personale
- 1 anno gratis del gestionale di fatturazione elettronica FlexTax
Per generare una directory .git eseguite ora il seguente comando:
git init
Se il repository Git per il vostro progetto esiste già, vi occorre solo l’indirizzo web o di rete di questa directory per creare con il comando ”git clone“ una copia di lavoro sul vostro computer:
git clone https://one-test.website/git-repository
Controllare lo stato del repository e aggiungere nuovi file per il controllo versione
Tra i principali fondamenti di Git c’è una buona organizzazione della propria directory di lavoro. Tramite questa non solo proponete modifiche e innovazioni personali a un progetto, che vengono poi acquisite tramite commit (“attivazione”), ma ottenete anche informazioni sulle attività di altri utenti. Potete verificare l’aggiornamento della vostra copia di lavoro mediante la seguente voce:
git status
Nel caso di un repository appena creato o di una corrispondenza assoluta di directory principale e copia di lavoro di solito il programma informa che non ci sono stati nuovi aggiornamenti al progetto (“No commits yet”) e annuncia che al momento non sono state condivise modifiche personali per il prossimo commit (“nothing to commit”).
Per aggiungere un nuovo file di controllo delle versioni o registrare un file modificato per il prossimo commit applicate il comando “git add” a questo file (deve trovarsi nella directory di lavoro). Nel nostro tutorial Git apportiamo come esempio un documento di testo chiamato “Test”:
git add Test.txt
Se si controlla nuovamente lo stato del repository il documento di esempio verrà presentato come potenziale candidato per la successiva fase di modifica ufficiale del progetto (“Changes to be commited“):
Confermare le modifiche tramite commit e includerle nell’HEAD
Come descritto nel paragrafo precedente, tutte le modifiche che avete registrato per il controllo versione devono sempre essere confermate tramite commit affinché siano incluse nell’HEAD. L’HEAD è una sorta di indice che punta all’ultimo commit effettuato nel vostro attuale ambiente di lavoro Git (noto anche come “branch”). Il comando per questo passaggio è:
git commit
Verificate sempre, prima di immettere il comando, se tutte le innovazioni desiderate per il commit siano state contrassegnate come tali (dunque con “git add”). In caso contrario saranno ignorate anche se si trovano nella directory della copia di lavoro.
Dopo l’esecuzione del comando, Git avvia automaticamente l’editor che avete indicato come scelta predefinita durante l’installazione o che il tool di controllo versione prevede come standard. Ora è possibile inserire nel documento un singolo commento sul commit pianificato, in cui le righe già incluse sono commentate da un punto e virgola e quindi non saranno visualizzate in seguito. Non appena chiudete l’editor Git crea il commit:
Come mostra lo screenshot, dopo aver eseguito “git commit” ricevete un messaggio riepilogativo sul commit: le parentesi quadre anteposte contengono da un lato il nome del branch (ramo del progetto; qui “master” poiché la nostra directory di lavoro è anche la directory principale), in cui vengono trascritte le modifiche, dall’altro il checksum SHA-1 del commit (qui “c0fdc90“). Seguiranno il commento liberamente scelto (qui "test") e informazioni concrete sulle modifiche apportate.
Modificare i commit generati o annullarli
Se avete apportato modifiche sotto forma di un commit, potete rivedere il contenuto in qualsiasi momento o revocarlo del tutto. Un caso tipico, in cui sono necessari degli aggiornamenti, è ad esempio quello in cui il commit è stato generato troppo presto e sono stati dimenticati alcuni file o modifiche importanti. In tal caso è necessario fornire a posteriori tramite “git add” i file nuovi o adattati e ripetere l’inserimento nel repository principale. Per far questo aggiungete al comando standard l’opzione --amend:
git commit --amend
Se desiderate invece revocare l’ultimo commit generato, potete farlo con il seguente comando Git:
git reset --soft HEAD~1
Con questo comando viene revocato l’ultimo commit inserito nell’HEAD. I file in esso contenuti sono quindi reimpostati allo stato “modifiche pianificate per il prossimo commit”. Se invece i dati di lavoro devono essere completamente eliminati utilizzate il seguente comando al posto del precedente:
git reset --hard HEAD~1
Visualizzare la cronologia di Commit
È importante imparare la gestione del progetto con Git, in particolare per le funzionalità elementari di Versioning. Un enorme punto a favore di questo sistema open source è il fatto che in qualsiasi momento è possibile visualizzare le ultime modifiche apportate al repository. Il comando Git richiesto è:
git log
Il comando “git log“ elenca i commit generati in ordine cronologico inverso, per cui sono visualizzati per impostazione predefinita il checksum SHA-1, l’autore (nome e indirizzo di posta elettronica) e la data del relativo commit. Inoltre, ovviamente, è possibile visualizzare anche il singolo messaggio che serve a voi e ad altri utenti come indicatore decisivo per classificare rapidamente i singoli cambiamenti. Nel nostro tutorial Git abbiamo precedentemente generato un singolo commit con il messaggio “test”, che il comando, come richiesto, visualizza anche durante l’esecuzione:
Inoltre il comando log può essere modificato utilizzando diversi parametri. Nella seguente tabella sono elencate alcune opzioni utili:
Opzione per il comando “git log“ | Descrizione |
---|---|
-p | visualizza anche le modifiche contenute in un commit |
-2 | elenca solo gli ultimi due commit eseguiti |
--stat | aggiunge a ogni voce una breve statistica, che mostra quali file sono stati modificati e quante righe sono state aggiunte o rimosse |
--pretty | modifica il formato dell’output, per cui sono disponibili diversi formati; --pretty=oneline è per esempio un possibile formato che elenca tutti i commit in una singola riga |
--abbrev-commit | visualizza soltanto i primi caratteri di un checksum SHA-1 |
--relative-date | visualizza la data di una modifica nel relativo formato (per esempio “due settimane fa“) |
Registrare i commit nel repository principale
Fin qui vi abbiamo mostrato in questo tutorial Git in che modo memorizzare le modifiche come commit nell’HEAD della directory locale. Ma affinché siano registrate anche nel repository principale è necessario immettere il seguente comando:
git push origin master
Con questo comando Git trasferisce automaticamente tutti i commit creati, finora presenti solo nella copia di lavoro, nella directory principale, chiamata anche “master”. Se nel codice indicato si sostituisce questo nome con quello di un altro branch (ramo del progetto) i file verranno inviati direttamente li.
Tagging: creare, eliminare ed elencare tag in Git
Come molti altri sistemi di controllo versione anche Git dispone di una funzione di tagging, che consente di contrassegnare come importanti dei punti selezionati nella cronologia di un repository. Di solito questi tag sono utilizzati per identificare le pubblicazioni di un software come versione 1.0, 2.0 ecc., affinché possano essere recuperate facilmente anche nei progetti di grandi dimensioni. Al riguardo Git supporta due tipi di tag:
- I tag annotati (“annotated“) sono memorizzati come oggetti autonomi nel database inclusi il proprio checksum, il messaggio di tagging, la data, il nome e l’indirizzo di posta dell’autore del tag, nonché la firma GNU Privacy Guard opzionale (firma GPG).
- I tag non annotati (“lightweight“), proprio come i branch, fungono solo da riferimento a un commit. Questo tipo è utile se sono necessari solo tag temporanei o non si desidera salvare le informazioni aggiuntive.
I tag annotati sono creati in Git utilizzando il comando “git tag -a“ sul commit richiesto. Se si aggiunge anche il parametro “m” è possibile formulare il messaggio tagging desiderato, posto tra virgolette, direttamente nell’interfaccia a riga di comando. In questo tutorial Git abbiamo generato il commit “test”, che a tal fine associamo anche a un tag che include il messaggio “example tag”:
git tag -a Test -m "example tag"
Se nella creazione del tag rinunciate al parametro “–m”, Git apre automaticamente l’editor, in modo che possiate inserirvi il messaggio tagging desiderato.
Per i tag non annotati procedete in modo simile, utilizzando però solo il comando di base “git tag” sul commit desiderato e rinunciando ad altri parametri. Riferito al nostro esempio il comando da eseguire è il seguente:
git tag Test
Non appena i tag saranno disponibili per il vostro repository, potrete visualizzarli con il “git tag“ già noto e i parametri opzionali “-l“ o “--list“:
git tag
git tag -l
git tag --list
Per eliminare un tag dalla directory di lavoro locale applicate la stringa di comando “git tag -d“. Il nostro riferimento a “test” viene rimosso come segue:
git tag -d Test
Per inciso, anche i tag come i commit devono essere trasferiti manualmente nella directory principale. Per far questo sono necessari il nome del tag e il comando “git push origin“. Ma al posto del nome del tag potete anche inserire il parametro “--tags“, tramite il quale tutti i tag generati vengono registrati nel repository:
git push origin --tags
Creare, gestire ed eliminare branch
I branch già citati in questo tutorial Git rappresentano in linea di principio solo singole versioni di lavoro del repository principale, classificato a sua volta come branch, con il nome “master”. Con questi rami di lavoro Git fornisce la base perfetta per sviluppare caratteristiche e funzioni separate l’una dall’altra e unificarle solo in un momento successivo. Quest’ultima operazione viene denominata anche “merge“ (dall’inglese to merge “unire“).
Non è difficile creare un nuovo branch: vi occorre solo l’indicazione “git branch” alla quale aggiungere l’etichetta desiderata per il ramo. È possibile creare un branch di esempio chiamato “test_branch” nel modo seguente:
git branch test_branch
È quindi possibile passare a questo branch in qualsiasi momento con il comando "git checkout":
git checkout test_branch
Se desiderate unificare i branch potete farlo con il comando “git merge“. Andate innanzitutto tramite “checkout” alla directory che deve registrare un altro ramo e lì eseguite il comando citato, compreso il nome del branch da registrare. Ad esempio la nostra versione di lavoro “test_branch” può essere unificata nel repository principale nel seguente modo:
git checkout master
git merge test_branch
Se avete unificato i rami di lavoro e quindi un determinato branch non vi serve più, potete semplicemente eliminarlo. Per far questo utilizzate la stringa di comando “git branch -d“ sul ramo della versione che non vi serve più. Con questo input potete eliminare Il nostro esempio del tutorial Git “test_branch“:
git branch -d test_branch
Unico presupposto per il processo di rimozione: dovete essere in un altro branch. Prima dell’esecuzione del comando siamo passati al repository principale, come potete vedere nello screenshot seguente:
Nel Digital Guide troverete anche informazioni su: "Git Branch: come rinominare i rami locali e remoti".
Grazie a un credito iniziale, puoi provare gratuitamente il Server Cloud di IONOS per 1 mese (o fino all’esaurimento del credito) e beneficiare del giusto mix di prestazioni e sicurezza!