Git
Chapters ▾ 2nd Edition

10.1 Git Binnenwerk - Binnenwerk en koetswerk (plumbing and porcelain)

Je bent misschien meteen doorgegaan naar dit hoofdstuk vanuit een eerder hoofdstuk, of je bent misschien hier beland nadat je de rest van het boek gelezen hebt - hoe dan ook, dit is waar we werking onder de motorkap en de implemantatie van Git gaan behandelen. We zijn van mening dat het leren van deze informatie fundamenteel belangrijk was om te begrijpen hoe nuttig en krachtig Git is, maar anderen hebben ons duidelijk gemaakt dat het juist verwarrend kan zijn en onnodig complex voor beginners. Daarom hebben we deze behandeling als laatste hoofdstuk in het boek opgenomen zodat je het vroeg of laat in je leerproces kunt gaan lezen. We laten deze beslissing geheel aan jou over.

Maar nu je hier bent, laten we beginnen. Ten eerste, als het nog niet duidelijk mocht zijn, Git is in wezen een op inhoud-adresseerbaar bestandssysteem met een VCS (versiebeheer) gebruikers interface erbovenop geschreven. Je zult straks meer lezen over de betekenis hiervan.

In de begindagen van Git (vooral voor 1.5), was de gebruikers interface veel complexer omdat de nadruk lag op dit bestandssysteem en veel minder op een strak versiebeheer systeem. In de laatste paar jaren is de gebruikersinterface bijgeslepen totdat het net zo gemakkelijk te gebruiken was als ieder ander systeem; maar vaak hangt het stereotype nog rond van de vroege Git interface die zo complex was en moeilijk te leren.

Het op inhoud-adresseerbare bestandssysteemlaag is ongelofelijk cool, dus we zullen die eerst in dit hoofdstuk behandelen; daarna zullen je vertellen over de transport mechanismen en het taken voor onderhoud van de repository waar je op den duur mee te maken kunt krijgen.

Binnenwerk en koetswerk (plumbing and porcelain)

Dit boek behandelt hoe Git te gebruiken met ongeveer 30 werkwoorden als checkout, branch, remote, enzovoort. Maar omdat Git initieel een gereedschapkist was voor een versiebeheersysteem in plaats van een compleet gebruikersvriendelijke versibeheersysteem, heeft het een aantal werkwoorden die het grondwerk verzorgen en die ontworpen zijn om op een UNIX manier te worden gekoppeld of vanuit scripts te worden aangeroepen. Aan deze commando’s worden over het algemeen gerefereerd als “plumbing” (binnenwerk) commando’s, en de meer gebruikersvriendelijke commando’s worden “porcelain” (koetswerk) genoemd.

De eerste negen hoofdstukken van het boek houden zich vrijwel exclusief bezig met porcelain commando’s. Maar in dit hoofdstuk ga je meerendeels te maken krijgen met de plumbing commando’s op het diepere niveau, omdat deze je toegang geven tot het binnenwerk van Git, en om je te laten zien hoe en waarom Git doet wat het doet. Veel van deze commando’s zijn niet bedoeld voor handmatig gebruik op de commando-regel, maar meer bedoeld als gebruik als onderdeel voor nieuwe gereedschappen en eigengemaakte scripts.

Wanneer je git init aanroept in een nieuwe of bestaande directory, maakt Git de .git directory aan, waar vrijwel alles wat Git opslaat en bewerkt aanwezig is. Als je een backup wilt maken of je repository wilt klonen, geeft het kopieren van deze ene directory naar elders je vrijwel alles wat je nodig hebt. Deze hele hoofstuk behandelt eigenlijk het spul in deze directory. Dit is hoe het eruit ziet:

$ ls -F1
HEAD
config*
description
hooks/
info/
objects/
refs/

Je kunt misschien een aantal andere bestanden hier zien, maar dit is een verse git init repository - het is wat je standaard te zien krijgt. Het description bestand wordt alleen gebruikt door het GitWeb programma, dus maak je er geen zorgen over. Het config bestand bevat jouw project-specifieke configuratie opties, en de info directory bevat een globale exclude bestand voor genegeerde patronen die je niet wilt tracken in een .gitignore bestand. De hooks directory bevat de hook-scripts voor de werkstation of server kant, waar we dieper op zijn ingegaan in Git Hooks.

Resten vier belangrijke regels: de HEAD en (nog te maken) index bestanden, en de objects en refs directories. Dit zijn de kern-onderdelen van Git. De objects directory bevat alle inhoud voor jouw database, de refs directory bevat verwijzingen naar commit objecten in die gegevens (branches), het HEAD bestand verwijst naar de branch die je op dit moment uitgechecked hebt, en het index bestand is waar Git de informatie over je staging gebied bewaart. We zullen hierna dieper ingaan op elk van deze onderdelen om te zien hoe Git werkt.