This is an in-progress translation.
To help translate the book, please fork the book at GitHub and push your contributions.

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.