-
1. Aan de slag
- 1.1 Over versiebeheer
- 1.2 Een kort historisch overzicht van Git
- 1.3 Wat is Git?
- 1.4 De commando-regel
- 1.5 Git installeren
- 1.6 Git klaarmaken voor eerste gebruik
- 1.7 Hulp krijgen
- 1.8 Samenvatting
-
2. Git Basics
-
3. Branchen in Git
- 3.1 Branches in vogelvlucht
- 3.2 Eenvoudig branchen en mergen
- 3.3 Branch-beheer
- 3.4 Branch workflows
- 3.5 Branches op afstand (Remote branches)
- 3.6 Rebasen
- 3.7 Samenvatting
-
4. Git op de server
- 4.1 De protocollen
- 4.2 Git op een server krijgen
- 4.3 Je publieke SSH sleutel genereren
- 4.4 De server opzetten
- 4.5 Git Daemon
- 4.6 Slimme HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Hosting oplossingen van derden
- 4.10 Samenvatting
-
5. Gedistribueerd Git
-
6. GitHub
-
7. Git Tools
- 7.1 Revisie Selectie
- 7.2 Interactief stagen
- 7.3 Stashen en opschonen
- 7.4 Je werk tekenen
- 7.5 Zoeken
- 7.6 Geschiedenis herschrijven
- 7.7 Reset ontrafeld
- 7.8 Mergen voor gevorderden
- 7.9 Rerere
- 7.10 Debuggen met Git
- 7.11 Submodules
- 7.12 Bundelen
- 7.13 Vervangen
- 7.14 Het opslaan van inloggegevens
- 7.15 Samenvatting
-
8. Git aanpassen
- 8.1 Git configuratie
- 8.2 Git attributen
- 8.3 Git Hooks
- 8.4 Een voorbeeld van Git-afgedwongen beleid
- 8.5 Samenvatting
-
9. Git en andere systemen
- 9.1 Git als een client
- 9.2 Migreren naar Git
- 9.3 Samenvatting
-
10. Git Binnenwerk
- 10.1 Binnenwerk en koetswerk (plumbing and porcelain)
- 10.2 Git objecten
- 10.3 Git Referenties
- 10.4 Packfiles
- 10.5 De Refspec
- 10.6 Uitwisseling protocollen
- 10.7 Onderhoud en gegevensherstel
- 10.8 Omgevingsvariabelen
- 10.9 Samenvatting
-
A1. Bijlage A: Git in andere omgevingen
- A1.1 Grafische interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Visual Studio Code
- A1.4 Git in Eclipse
- A1.5 Git in Sublime Text
- A1.6 Git in Bash
- A1.7 Git in Zsh
- A1.8 Git in PowerShell
- A1.9 Samenvatting
-
A2. Bijlage B: Git in je applicaties inbouwen
- A2.1 Commando-regel Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Bijlage C: Git Commando’s
- A3.1 Setup en configuratie
- A3.2 Projecten ophalen en maken
- A3.3 Basic Snapshotten
- A3.4 Branchen en mergen
- A3.5 Projecten delen en bijwerken
- A3.6 Inspectie en vergelijking
- A3.7 Debuggen
- A3.8 Patchen
- A3.9 Email
- A3.10 Externe systemen
- A3.11 Beheer
- A3.12 Binnenwerk commando’s (plumbing commando’s)
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 toch 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 gaaf, 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 primair 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.
Je zult nu wel gemerkt hebben dat 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 hoofdstuk behandelt eigenlijk het spul dat je in deze directory kunt zien.
Dit is hoe een nieuw-gemaakte .git
-directory er normaalgesproken uitziet:
$ ls -F1
config
description
HEAD
hooks/
info/
objects/
refs/
Afhankelijk van je versie van Git, zou je wat extra inhoud kunnen zien, maar dit is een versie git init
repository — dit is wat je standaard ziet.
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, tags, remotes en zo meer), het HEAD
bestand verwijst naar de branch die je op dit moment uitgecheckt 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.