Come già anticipato, uno dei punti di forza di Git è il supporto allo sviluppo distribuito di progetti. Sebbene Git offra diverse possibilità per gestire lo sviluppo collaborativo, proviamo subito a presentare il caso di un web developer che voglia apportare il suo contributo a un progetto condiviso già avviato, analizzando, anche qui, i comandi principali.
- recuperare il repository ospitato su un server remoto
$ git clone https://example.com/project.git Cloning into 'project'... remote: Enumerating objects: 19, done. remote: Counting objects: 100% (19/19), done. remote: Compressing objects: 100% (14/14), done. remote: Total 19 (delta 3), reused 16 (delta 3), pack-reused 0 Receiving objects: 100% (19/19), 112.25 KiB | 281.00 KiB/s, done. Resolving deltas: 100% (3/3), done.
- entrare nella directory project creata dallo step precedente
cd project
- creare un branch
git branch my-contribution
- passare il branch appena creato
$ git checkout my-contribution Switched to branch 'my-contribution'
- apportare modifiche a file esistenti, oppure aggiungere un file, ed eseguirne il commit, come fatto nella precedente sezione
- verificare l’attuale sorgente “remota” rel repository
$ git remote --verbose origin https://example.com/project.git (fetch) origin https://example.com/project.git (push)
- inviare le proprie modifiche su un branch del repository remoto
git push origin my-contribution
Complimenti, hai creato il tuo primo contributo (anche se per ora non ancora nella linea “principale” del progetto) a un progetto remoto!
Che cosa abbiamo fatto?
Come sopra: i comandi presentati per lo sviluppo distribuito hanno compiuto le seguenti operazioni:
- creazione di una copia locale del repository in Git – il comando git clone crea un clone di un repository disponibile su un server; verrà creata una directory locale che contiene la copia completa (da qui il nome clone) del repository remoto, comprensiva di tutta la history e di tutti i commit che la compongono;
- creazione di un branch in Git – vedremo meglio nel dettaglio cosa è un branch nel prossimo capitolo, per ora è sufficiente pensare ai branch come diverse “linee temporali” del repository; nel momento in cui si clona un repository remoto viene attivato il branch predefinito (il cui nome è tipicamente master o main), il comando git branch impartito ha creato un nuovo branch che “continua” dall’ultimo commit applicato al branch principale.
- selezione di un branch in Git – è possibile scegliere su quale branch lavorare tramite il comando git checkout; questo comando modifica il contenuto della directory locale del repository riportando il suo contenuto all’ultimo commit applicato su quel branch; i successivi commit verranno applicati solo al branch attualmente selezionato;
- visualizzazione dei “remote” in Git – il comando git remote permette di sapere a quale sorgente remota sta puntando il nostro clone locale; molto spesso si tratterà di una sola sorgente, ma in funzione della composizione e scelte del team potrebbero esserci più sorgenti remote, eventualmente distinte per sorgenti da cui recuperare le modifiche degli altri sviluppatori (fetch) e sorgenti a cui inviare le nostre modifiche (push);
- invio delle proprie modifiche in Git – con il comando git push è possibile inviare a un repository remoto (nell’esempio quello nominato origin) quanto presente nel clone locale; in particolare, con il comando indicato sopra, viene inviato il branch my-contribution e tutti i commit in esso contenuti;
Approfondiremo più nel dettaglio il flusso di lavoro con repository remote in seguito, ma già con i comandi introdotti finora è possibile creare una serie di modifiche a un progetto preesistente, “raccolte” in un branch separato che, una volta fatto “push” è disponibile a tutti coloro che hanno accesso al repository remoto.