Objectverkenner
Git heeft de reputatie ingewikkeld te zijn. Vrijwel alles daarvan komt doordat je het model nooit ziet: vier soorten objecten, en pointers. Zodra je een commit kunt aanklikken, op zijn tree belandt en ontdekt dat jouw bestand een blob is met een naam die een tree eraan gaf, houdt het porselein op magie te zijn.
⌘K → Objectverkenner. Niets op deze pagina kan één byte veranderen — elke
aanroep erachter is een leesactie.

De vier objecten
| Object | Is | Weet |
|---|---|---|
| blob | De inhoud van een bestand | Niets. Niet zijn naam, niet zijn pad, niet zijn geschiedenis |
| tree | Een mapinhoudsopgave | Namen, modi en de sha van elke onderliggende blob of tree |
| commit | Eén momentopname | Zijn tree, zijn ouders, auteur, committer, boodschap |
| tag | Een geannoteerde tag | Het object waar hij naar wijst, de tagger, een boodschap |
De verrassing voor de meeste mensen zit in de eerste rij. Een blob heeft geen naam. Twee bestanden met identieke inhoud, waar dan ook in je geschiedenis, zijn dezelfde blob, één keer opgeslagen. De naam woont in de tree die ernaar wijst — en dat is waarom git inhoud volgt in plaats van bestanden, en waarom hernoemingen gedetecteerd worden in plaats van vastgelegd.
Een ref — refs/heads/main, refs/tags/v1.0, HEAD — is enkel een bestand
met een sha erin. Dat is de hele inhoud van "branchen is goedkoop".
Rondlopen
De linkerkolom somt elke ref in de repository op, gegroepeerd zoals git ze groepeert. Klik er een aan om te belanden op het object dat hij benoemt.
Van daaruit is alles een link:
- Een commit toont zijn
treeen elkeparent— klik door naar de momentopname, of achteruit door de geschiedenis, commit voor commit. - Een tree somt zijn regels op met modus, type, sha en grootte. Klik een naam aan om dat kind te openen.
- Een blob toont zijn tekst (het begin ervan, bij iets groots), of zegt ronduit dat hij binair is.
- Een geannoteerde tag toont waar hij naar wijst — klik door naar de commit.
Terug loopt je stappen weer af.
Een revisie intypen
Het vak accepteert alles wat git rev-parse accepteert, en daar houdt dit op een
browser te zijn en wordt het een manier om te leren:
| Typ dit | Om te krijgen |
|---|---|
HEAD |
De huidige commit |
HEAD~3 |
Drie commits terug |
HEAD^{tree} |
De tree van die commit, afgepeld |
HEAD:src/app.ts |
De blob voor dat pad, rechtstreeks |
v1.0^{} |
Waar een geannoteerde tag naar wijst, in plaats van het tagobject |
a1b2c3d |
Elk object, op sha — afkortingen werken |
De moduscijfers in een tree-lijst zijn het kennen waard: 100644 een bestand,
100755 uitvoerbaar, 040000 een subtree, 120000 een symlink, 160000 een
submodule-gitlink — en die laatste is alles wat een submodule opslaat.
Grenzen die je moet kennen
- Alleen-lezen, met opzet. Er is hier niets om mee te schrijven. Objecten met
de hand maken is een oefening met
git hash-object, en hoort in een terminal. - Grote blobs worden afgekapt na de eerste 200 KB — genoeg om te zien wat het is, niet genoeg om het venster te laten hangen.
- Groottes zijn de inhoudsgrootte van het object zoals
git cat-file -sdie meldt, niet wat het na packen op schijf kost. Daarvoor zie je onderhoud. - Onbereikbare objecten zijn nog steeds objecten. Plak een sha uit een
dangling-rapport van
git fscken hij opent, wat vaak de snelste manier is om te zien wat een verloren commit bevatte voor je besluit of je hem terughaalt.
Zie ook: De grafiek · Repository-onderhoud · Herstel