Riassunti

Appunti universitari in formato Markdown da Obsidian.

Git è un software per il controllo della versione. Consente a gruppi di sviluppatori (client) di lavorare contemporaneamente su più file. I file vengono archiviati in un repository condiviso (in genere online) e le copie vengono archiviate localmente sui client.

Alcune operazioni del cliente:

  • crea una copia di lavoro dei file così come sono nel repository online;
  • modifica la copia locale dei file offline;
  • conferma le modifiche con un messaggio di commit che specifica cosa è stato modificato;
  • invia la sua copia al repository centrale.

I commit sono come istantanee del codice accompagnate da un messaggio. I commit possono essere ripristinati e gli utenti possono selezionare quali file eseguire il commit e da quali file devono essere esclusi.

Ramificazione Git

Git è basato su un sistema di ramificazione:

branching
branching

  • ogni riga è un branch;
  • i cerchi rappresentano i commit;
  • è possibile creare un nuovo branch come copia di un altro branch;
  • le frecce che tornano a un branch più vecchio sono unioni;
  • master è il branch iniziale e predefinito in git.

Architettura

architettura
architettura

Branch e comandi

I branch possono essere remoti e locali. I client lavorano su filiali locali e possono sincronizzarli con i branch remoti:

  • git pull: aggiorna la tua copia di lavoro (ramo di lavoro) con eventuali modifiche dal repository remoto;
  • git add: aggiunge uno o più file che vuoi condividere;
  • git commit: conferma le modifiche alla copia di lavoro locale;
  • git push: invia le modifiche locali confermate al repository remoto. Nota: se qualcun altro ha inviato il suo codice al repository remoto dopo che abbiamo eseguito l'ultimo pull, allora dobbiamo eseguire un altro pull, altrimenti non possiamo eseguire il push;
  • git status: confronta il branch locale (copia di lavoro) con la copia del corrispondente branch remoto;
  • git branch: elenca, crea o elimina rami;
  • git checkout name: si sposta in un altro branch o in un commit specifico. Può anche essere usato per creare e passare a un nuovo branch contemporaneamente. Con git checkout, le modifiche non salvate vengono trasferite e il comando fallirà se le modifiche non salvate sono in conflitto con il branch di destinazione;
  • git merge name: unisce un determinato branch al branch corrente (cioè unisce tutte le modifiche) creando un commit di unione. Quando i commit divergenti nei due branch non modificano lo stesso file nella stessa area allora il comando merge fonderàle modifiche automaticamente. In caso contrario, allo sviluppatore verrà chiesto di risolvere i conflitti. I conflitti sono evidenziati nel file in conflitto da speciali tag git;
  • git init: crea e inizializza un nuovo repository git locale;
  • git clone remote_url: crea un repository git locale clonando un repository remoto esistente;
  • git stash;
  • git reset;
  • ...