Plumbing and Porcelain
Questo libro parla di come usare Git utilizzando più di 30 verbi, tra i quali checkout
, branch
, remote
e così via. Siccome Git è stato inizialmente sviluppato come insieme di strumenti per un VCS piuttosto che un completo VCS user-friendly comprende un mucchio di verbi per fare lavori di basso livello e progettati per essere concatenati insieme in stile UNIX o invocati da script. Di solito ci si riferisce a questi comandi come “plumbing”, mentre i comandi più user-friendly sono detti comandi “porcelain”.
I primi otto capitoli del libro hanno a che fare quasi esclusivamente con comandi porcelain. In questo capitolo invece vedremo i comandi plumbing di basso livello, perchè permettono di accedere al funzionamento interno di Git ed aiutano a dimostrare come e perchè Git fà quello che fà. Questi comandi non sono pensati per essere lanciati manualmente dalla linea di comando ma sono da considerare piuttosto come mattoni con i quali costruire nuovi strumenti e script personallizzati.
Lanciando git init
in una directory nuova o esistente Git provvederà a creare la directory .git
che contiene praticamente tutti i dati sui quali che Git. Se volete fare un backup o un clone del vostro repository vi basta copiare questa directory dal qualche altra parte per avere praticamente tutto quello che vi serve. Tutto questo capitolo ha a che fare con il contenuto di questa direcotry. La sua struttura è la seguente:
$ ls
HEAD
branches/
config
description
hooks/
index
info/
objects/
refs/
Potreste trovare altri file, ma questo è il risultato di git init
— è quello che vedete di default. La directory branches
non è utilizzata dalle versioni più recenti di Git e il file description
è utilizzato solamente dal programma GitHub, quindi potete ignorarli. Il file config
contiene le configurazioni specifiche per il progetto e la directory info
mantiene un file di exclude globale per ignorare i pattern dei quali non volete tenere traccia un in file .gitignore. La directory hooks
contiene i vostri script di hook client- o server-side, dei quali abbiamo parlato in dettaglio nel capitolo 6.
Non abbiamo parlato di quattro voci: i file HEAD
e index
e le directory objects
e refs
. Queste sono le parti principali di Git. La directory objects
conserva tutto il contenuto del vostro database, la directory refs
conserva i puntatori agli oggetti commit (branches), il file HEAD
punta al branch di cui avete fatto il checkout e il file index
è dove Git conserva la informazioni sulla vostra area di staging Vedremo in dettaglio ognuna di queste sezioni per capire in che modo opera Git.