fbpx

Git’s 10e verjaardag

Git’s 10e verjaardag

Tien jaar geleden kon de Linux kernel gemeenschap het version control systeem BitKeeper niet langer gebruiken en ook andere Source Control Management (SAM) voldeden niet aan hun behoeften voor een gedistribueerd version control system. Linus Torvalds, de maker van Linux, nam de uitdaging aan, verdween in het weekend en kwam in de week daarna naar buiten met Git. Vandaag de dag Git wordt gebruikt in duizenden projecten en heeft zich ontwikkeld tot social medium voor programmeurs. Projecten zoals KVM, Qt, Drupal, Puppet en Wine gebruiken allemaal Git als version control systeem. De GitHub repository waar de meeste projecten zijn gehosts kan worden beschouwd als de Facebook voor developers.

In dit artikel zullen we enkele van de fundamentele eigenschappen van Git te bespreken. Wij raden onze eendaagse cursus Git voor developers aan als u wilt oefenen en kennis maken met veel van zijn details.

Git Fundamentals

Dus, wat is Git in een notendop? Het grote verschil tussen Git en andere VCS (Subversion et al) is de manier waarop Git denkt over zijn data. Conceptueel slaan de meeste andere systemen informatie op als een lijst van de file-based veranderingen. Deze systemen (CVS, Subversion, Perforce, Bazaar, enzovoort) beschouwen de informatie die ze bewaren als een set van bestanden en de wijzigingen daarin door de tijd heen.

Git denkt over zijn data daarentegen als een set van moment opnamen van een miniatuur bestandssysteem. Bij iedere commit of het opslaan van data van uw project in Git, maakt Git als het ware een foto van de toestand van al uw bestanden op dat moment en slaat een verwijzing op naar die moment opname. Voor de efficiƫntie zal Git, als de files niet zijn veranderd, het bestand niet opnieuw opslaan, maar alleen een link naar de eerdere identieke bestand dat het al heeft opgeslagen. Git denkt over zijn data meer als een serie snapshots.

Dit is een belangrijk verschil tussen Git en bijna alle andere VCS. Git heroverweegt bijna elk aspect van versiebeheer dat de meeste andere systemen kopieerden uit de vorige generatie. Dit maakt Git tot een soort mini-bestandssysteem met enkele krachtige tools daarbovenop in plaats van simpelweg een VCS.

Bijna alle operaties zijn lokaal

Voor de meeste operaties in Git heb je alleen lokale files en resources nodig – over het algemeen geen informatie van andere computers op uw netwerk. Als je gewend bent aan een VCS waar de meeste operaties die netwerk latency overhead hebben, zal dit aspect van Git je doen vermoeden dat de goden van de snelheid Git hebben gezegend met een boven natuurlijke kracht. De hele geschiedenis van het project staat op uw lokale harde schijf, de meeste operaties zijn bijna instantaan.

Om bijvoorbeeld de geschiedenis van het project te bekijken, hoeft Git niet naar de server te gaan om de geschiedenis te verkrijgen. Git leest dit gewoon direct van uw lokale database. Dit betekent dat u de geschiedenis van het project vrijwel direct ziet. Wilt u de wijzigingen tussen de huidige versie van een bestand en het bestand een maand geleden zien, dan kan Git gewoon het bestand van een maand geleden opzoeken en een lokale verschil berekening doen.

Git Heeft Integriteit

Alles in Git wordt gecheck-summed voordat het wordt opgeslagen en wordt vervolgens aangeduid met die checksum. Dit betekent dat het onmogelijk is om de inhoud van een bestand of map te veranderen zonder dat Git er weet van heeft. Deze functionaliteit is op het laagste niveau in Git ingebouwd en integraal in zijn filosofie. Je kunt onderweg geen informatie kwijtraken of het bestand corrumperen zonder dat Git het detecteerd.

Het mechanisme dat Git gebruikt voor deze controleberekening heet een SHA-1 hash. Dit is reeks van 40-teken samengesteld uit hexadecimale tekens (0-9 en a-f) en berekend op basis van de inhoud van een bestand of mapstructuur in Git. Een SHA-1 hash ziet er ongeveer als volgt uit:

24b9da6552252987aa493b52f8696cd6d3b00373

U komt deze hash waarden overal in Git tegen omdat Git ze heel veel gebruikt. Sterker nog, Git bewaart alles in de database niet op bestandsnaam, maar door de hash-waarde van de inhoud ervan.

Git voegt in het algemeen slechts data toe

Met alle acties in Git, voeg je alleen gegevens toe aan de Git database. Het is moeilijk om het systeem iets te laten doen wat niet ongedaan gemaakt kan worden of iets uit te wissen. Zoals in elke VCS, kan je wijzigingen kwijt raken die nog niet gecommit zijn. Maar als je een snapshot in Git hebt gemaakt, is het erg moeilijk om data te verliezen. Zeker als u regelmatig uw database in een andere repository opslaat.

Dit maakt het gebruik van Git een plezier omdat we weten dat we kunnen experimenteren zonder het gevaar te lopen dingen ernstig te verknoeien.

De drie toestanden

Git heeft drie belangrijke toestanden waarin uw bestanden zich kunnen bevinden : committed, changed en staged. Committed betekent dat de gegevens veilig in de lokale database zijn opgeslagen. Changed betekent dat u het bestand hebt veranderd, maar het nog niet heeft opgeslagen in de database. Staged betekent dat u een gewijzigd bestand in de huidige versie heeft gemarkeerd en in de volgende commit snapshot zal gaan.

Dit leidt ons tot de drie belangrijkste onderdelen van een Git project: de Git directory, de working directory en de staging area.