Dit Is Git

Geplaatst door Michiel de Mare di, 05 feb 2008 22:42:00 GMT

Het lijkt wel alsof je de laatste tijd niet anders meer hoort dan verhalen over hoe geweldig gedistribueerd versiebeheer is, en dan het gaat het vooral over “git”, het nieuwe kindje van Linus Torvalds.

En niet voor niks. Er zijn een aantal problemen met subversion. Branchen is verwarrend (een branch is een cheap copy?) dus bijna niemand doet het, gewoon mergen is vervelend, veranderingen bijhouden in twee of meer branches is zo lastig dat je iemand in je team de rol van versiebeheerder moet geven (en ja, dat was ik meestal) en bij open-source projecten moet je kiezen tussen of iemand volledige commitrechten geven, of ze patches laten opsturen via email of een bugtracker. Tenslotte heb je altijd één centrale repository, en heb je dus een verbinding nodig voor de meeste acties.

Git werkt totaal anders. Er zijn enorme tutorials voor, en tegen de honderd commando’s, maar ik beperk me hier tot de kern:

Een repository bestaat uit vier soorten objecten:
  • blobs (bestandsfragmenten)
  • trees (de directorystructuur met de bestandsnamen, met per bestand uit welke blobs het bestaat)
  • commits (een tree plus een lijst met parent commits)
  • tags (metadata)

Er is geen centrale repository, maar iedereen bewaart de hele repository lokaal. Niet iedereen heeft dus persé dezelfde repository. Maar dat geeft niet, want synchroniseren betekent alleen de ontbrekende blobs, trees en commits uitwisselen.

Een repository is onveranderlijk – dat wil zeggen, er komt alleen data bij. Bestaande data verandert nooit. Als je een branch wilt maken, gebruikt git daar hard links voor. Dat maakt het een goedkope operatie.

Omdat elke commit een parent heeft, heb je dus een boom met commits. En dat blijkt noodzakelijk te zijn voor het automatisch verwerken van patches.

Een van de consequenties is dat omdat branches zo goedkoop zijn, je voor elk idee dat je hebt een branch kunt maken. Dat kan een enorm voordeel zijn.

Ik ben nu bezig om mijn subversion repository te converteren naar git. Over een paar weken vertel ik over mijn ervaringen.

De beste resource die ik heb gevonden is trouwens een screencast. Van harte aanbevolen!

Geplaatst in  | 2 reacties

Reacties

  1. Matthijs Langenberg zei ongeveer 12 uur later:

    Ik gebruik git-svn al een tijdje. Hiermee kan ik op mijn eigen machine git gebruiken en wanneer ik mijn repository push gaan de commits gewoon naar SVN toe. Voornaamste voordeel hiervan is dat ik voor elke feature waar ik mee bezig ben een lokale branch heb. Op deze branches doe ik hele kleine mini-commits zodat ik steeds weer met een schone lei begin (vooral mentaal is dit belangrijk!). Zal ik anders de workflow die ik op dit moment gebruik eens posten? Er zijn vast wel mensen die hier verbeteringen in zien.

    Zie ook http://www.youtube.com/watch?v=4XpnKHJAok8 en http://www.youtube.com/watch?v=8dhZ9BXQgc4

  2. Redmar Kerkhoff zei ongeveer 19 uur later:

    De peepcode screencast hiervan mag ook eigenlijk niet gemist worden! Zeer de moeite waard.

    http://peepcode.com/products/git

    Daarbij is een aparte prompt met de branchnaam in je shell ook wel fijn:

    http://acts.as.streeteasy.com/archives/2007/12/19/git_in_your_prompt/

    en

    http://www.evenflow.nl/2007/11/15/git-branch-in-your-bash-prompt/

    hf met git!

(Laat url/e-mail achter »)

   Voorvertoning