Tutorial > Installazione e primi passi con Git

Installazione e primi passi con Git

Pubblicato il: 05 ottobre 2019

GIT Sviluppo Ubuntu Version Control

Git è un software di controllo versione distribuito che nacque nel 2005 come strumento per semplificare lo sviluppo del Kernel Linux, facilitando la coordinazione tra i programmatori. Oggi Git è diventato uno dei software di controllo versione più diffusi al mondo.

Git è utilizzabile da interfaccia a riga di comando e permette il tracking dei cambiamenti di qualunque insieme di dati. I punti di forza del software Git sono alta velocità, integrità dei dati e supporto per flussi di lavoro. Con Git ogni cartella di dati posta su qualunque dispositivo risulta una “repository” a tutti gli effetti, con una cronologia completa e possibilità di tracking dei cambiamenti.

Questa guida spiegherà come installare e utilizzare Git sulle principali distribuzioni Linux, facendo principalmente riferimento a Ubuntu 18.04.

Per prima cosa dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.

Installare Git

Aggiorna i repository della distribuzione e avvia l’installazione di Git tramite apt-get:

$ apt-get update && apt-get install git

Una volta terminata la procedura, Git risulterà installato. Per verificare la corretta riuscita dell’installazione e la versione del software potrai utilizzare l’argomento “--version”:

$ git –version

Infine per iniziare ad utilizzare “Git” dovrai configurare le informazioni dell’utente (nome e indirizzo e-mail) che saranno associate a ogni pacchetto che creerai:

$ git config --global user.name "Name Surname"
$ git config --global user.email "[email protected]"

D’ora in avanti la guida si concentrerà sulla spiegazione delle varie funzionalità del software, riportando la sintassi di ogni comando. Le varie funzionalità sono state testate su Ubuntu, sebbene esse risultino valide per ogni altra distribuzione Linux.

Inizializzare l'area di Lavoro

Lo scopo principale di Git è quello di favorire la collaborazione tra più flussi di lavoro su un determinato progetto. La prima cosa da fare, quindi, consiste nell’inizializzare un’area di lavoro, creando una “repository” vuota locale o ottenendone una da remoto.

Nel primo caso, per creare o re-inizializzare una nuova “repository”, dovrai ricorrere al comando “init”:

$ git init

Questo comando creerà una cartella “.git” che andrà a contenere tutti i file necessari per il “repository”. Nella cartella andranno indicati tutti i file che compongono il progetto, di cui tener traccia. Tutti i nuovi file, inizialmente, risulteranno “untracked”, ovvero non tracciati. Ciò vuol dire che non si terrà conto di essi nel momento del caricamento dello snapshot.
Nel caso in cui si voglia iniziare a tracciare i file bisognerà ricorrere al comando “add”, seguito da una “commit”, ovvero una breve indicazione di cosa si sta includendo:

$ git add <FilePath/FileName>
$ git commit -m ‘<Description>’

In Fig. 1 è riportato un esempio di inizializzazione di una nuova “repository” ed inclusione del file “FileTestA”. Inoltre è mostrato l’Output del terminale che segnala la riuscita dell’operazione.

 image1.png

Fig. 1 – Esempio Inizializzazione e Tracking Git su Terminale di Ubuntu 18.04

Nel caso in cui volessi, invece, contribuire su una “repository” già esistente dovrai utilizzare il comando “clone”. Con tale comando, Git riceve una copia di tutte le versioni dei file del progetto, presenti sul server indicato:

$ git clone <URL> <Destination_Folder>

Al posto di <URL> dovrai specificare l’indirizzo da cui scaricare il pacchetto, mentre al posto di <Destination_Folder> dovrai indicare, qualora lo ritenessi opportuno, il percorso e la cartella in cui salvare i file scaricati (non specificando nulla essi verranno salvati nella cartella “Home”).

Per quanto riguarda l’URL per scaricare le “repository”, i protocolli di trasferimento utilizzabili da Git sono molteplici:

·       Protocollo Git (git://);

·       Protocollo HTTP (http:// oppure https://);

·       Protocollo SSH (ssh://);

·       Utente e Server (username@server:/path.git).

Salvataggio e Stage

Ogni file della cartella di lavoro può avere lo status di “untracked”, “tracked”, “unmodified” e “modified”. Come già indicato nel precedente paragrafo i file con lo status di “untracked” sono tutti quei file della directory di lavoro non presenti nello snapshot (situazione che si verifica nel caso di creazione di un nuovo “repository”).
Quando si clona un “repository” esistente, invece, lo stato di base di tutti i file scaricati è “tracked”. Questi file, quindi, potranno a loro volta essere “unmodified”, se dopo essere stati scaricati non sono stati editati, oppure “modified” qualora fossero state apportate delle modifiche, in quanto sono cambiati rispetto all’ultima commit.

Per poter verificare lo stato di un file puoi ricorrere al comando “status”:

$ git status

Nell’immagine seguente è riportato uno screenshot del terminale in cui è stato inizializzato un nuovo progetto, è stato aggiunto un file e creata una prima commit. Ricorrendo successivamente al comando “status” il terminale specifica che non ci sia alcun file modificato da aggiornare. Dalla linea verde in poi viene eseguito nuovamente il comando “status”, previa modifica del file.

 image2.png

Fig. 2 – Esempio Inizializzazione, Tracking e Modifica File Git su Terminale di Ubuntu 18.04

Il file appena modificato compare adesso sotto la voce “Changes not staged for commit”, il che vuol dire che un file tracciato ha subito una variazione nella cartella di lavoro ma non è ancora nello stage.

Sarà quindi possibile procedere in due modi diversi:

  • Aggiornare il file nello stage (sarà necessario ripetere la procedura già fatta per il tracking, vale a dire al comando “git add”);

  • Ignorare le modifiche (utilizzando “git checkout <File_Path>).

Ipotizziamo di voler fare lo stage del file appena modificato, eseguendo il comando “git add” e ripetendo “git status” per valutarne lo stato.

image3.png

Fig. 3 – Stage dei File Modificati su Terminale di Ubuntu 18.04

Il file risulterà quindi modificato ma pronto per la commit (rettangolo verde in figura 3). Qualora prima di fare la commit si effettuasse un’ulteriore modifica al file e se ne verificasse lo stato, esso verrebbe indicato sia come file pronto per la commit che come file di cui non è stato fatto lo stage (rettangolo rosso in figura 3).
Questo accade perché il file in stage è quello precedente alla modifica (sarà quello che verrà committato nel caso in cui si eseguisse il comando “commit” in questo momento), mentre quello all’esterno è quello appena modificato. Per committare quest’ulteriore modifica, dovrai svolgere nuovamente l’add (rettangolo azzurro in figura 3).

Ignorare i file

Se non vuoi che certi file vengano aggiunti automaticamente, per esempio i file di log, è possibile creare un file “.gitignore” con all’interno una lista dei file che vuoi escludere.

Per includere automaticamente un certo tipo di pattern, per non elencare tutti i singoli file da ignorare, è possibile includere intere cartelle e utilizzare caratteri speciali. Le regole per i pattern sono:

  • Righe vuote o che iniziano con “#” sono automaticamente ignorate;
  • Possono essere impiegati slash “/” per indicare una sottocartella;
  • Si può negare un pattern tramite il carattere “!”;
  • Possono essere impiegati i “glob pattern”.

Un glob pattern è una sintassi attraverso la quale si rappresenta un insieme di stringhe. I più comuni sono:

  • l’asterisco (*) che indica una stringa qualunque (spesso impiegato per contrassegnare tutti i file con una determinata estensione);
  • il punto interrogativo (?) che indica un qualunque carattere e le parentesi quadre ([ … ]) che permettono di specificare una serie di caratteri o numeri.

Commit delle Modifiche

Una volta inseriti i file nello stage (tramite il comando “git add”) potrai fare la commit delle modifiche. La commit serve a registrare lo snapshot salvato nella tua area di stage.

Tutto ciò che non è inserito in stage, ovviamente, non sarà nella commit ma rimarrà come modificato nella cartella locale.

Il modo più semplice con cui potrai eseguire la commit consiste nell’utilizzare il seguente comando:

$ git commit

Così facendo verrà aperto l’editor di testo che mostrerà l’ultimo output del comando “git status” con la prima riga vuota: qui sarà possibile inserire il tuo messaggio di commit, in modo da indicare opportunamente quali modifiche stai apportando.

In questa maniera hai creato la tua prima commit! Prima di concludere le guida saranno mostrate le procedure per l’ulteriore rimozione o modifica dei file.

Rimuovere i file

Qualora volessi rimuovere un file Git non solo dovrai rimuoverlo dai file tracciati, ma dovrai ripetere la commit per registrare le tue modifiche. Se dovessi infatti cancellare semplicemente il file dalla cartella, esso risulterà come un file modificato di cui non è stato fatto lo stage.

Tramite il comando “git rm” seguito dal percorso e nome del file, la rimozione del file sarà messa in stage e scomparirà completamente dopo la commit successiva:

$ git rm <File>

Qualora avessi già modificato e aggiunto all’indice il file, potrai forzarne la rimozione aggiungendo l’opzione “-f”:

$ git rm -f <File>

Nel caso in cui, invece, volessi semplicemente rimuovere un file erroneamente inserito in stage pur mantenendolo su disco, potrai utilizzare l’opzione “--cached”:

$ git rm --cached <File>

Spostare e Rinominare i file

Un’altra cosa che potresti voler fare è quella di spostare o rinominare i file. Questa operazione non è automatica, in quanto Git non tiene esplicitamente traccia degli spostamenti dei file, ovvero non viene generato alcun metadato per tener memoria dell’opzione di “rinomino”.

Tale operazione potrebbe essere svolta con i comandi già noti, eseguendo prima il cambio di nome, seguito dalla rimozione da Git del file “precedente” (git rm) e aggiunta del “nuovo” (git add).

Per evitare di effettuare per ogni rinomino/spostamento questa serie di comandi, Git è dotato di un suo specifico comando: “git mv”, il quale fornisce in un colpo solo lo stesso risultato dei tre elencati precedentemente.

La sintassi completa è riportata di seguito:

$ git mv <OldPath/OldName> <NewPath/NewName>

Tale comando fornisce lo stesso identico risultato dei tre a seguire:

$ mv <OldPath/OldName> <NewPath/NewName>

$ git rm <OldPath/OldName>

$ git add <NewPath/NewName>

Così facendo il file risulterà rinominato e/o spostato e già in stage, pronto per la commit. Qualora volessi verificare la riuscita dell’operazione potrai eseguire il comando “git status” che rilascerà nella lista dei cambiamenti da committare una sezione denominata renamed, in cui saranno elencati tutti i file che hanno cambiato nome o percorso, specificandone, per ciascuno, sia il nome/percorso precedente sia quello attuale.