Starten met Mercurial

Beginnen met DVCS (bijvoorbeeld Mercurial) kan lastig zijn, helemaal als je van een VCS (zoals SVN) overstapt. Dit artikel geeft een een quick tour langs de belangrijkste features.

Niet al te lang geleden ben ik overgestapt van SVN naar Mercurial. Voor een intern projectje gebruik ik het nu altijd: het is altijd makkelijk om iets onder versiecontrole te hebben, en aangezien je met Mercurial (hg) en Git niet verbonden hoeft te zijn met een server om een repository aan te maken...

De belangrijkste commando's

De belangrijkste commando's bij Mercurial zijn hg init, hg add, hg commit, hg push en hg pull. Deze zul je het vaakst gebruiken, en daarom zal ik ze in dit artikel ook even toelichten.

hg init

Met het commando hg init maak je een nieuwe repository aan. Een map met een hg repository erin kun je herkennen aan de map .hg in de bovenste directory. SVN plaatst in iedere submap een .svn map, hg doet dit niet.

hg add

Nadat je een repository hebt aangemaakt, kun je aan de gang gaan met het aanmaken van bestanden, of bestaande bestanden kopieren. Voordat je ze kunt committen, moet hg wel weten wat er allemaal onder versiebeheer moet komen te staan. Je kunt bestanden toevoegen aan je repository met het commando hg add. Om een hele directory toe te voegen gebruik je hg add ., om een specfiek bestand toe te voegen hg add bestandsnaam.txt.

hg stat

Met hg stat kun je snel zien wat er is veranderd sinds je laatste commit. Statussen worden met verschillende letters en tekens uitgelegd. A staat voor added, M voor modified, ? staat voor niet onder versiebeheer en ! staat voor missing.

In mijn geval geeft hg stat dit terug:

`A README`

hg commit

Als ik deze wijziging wil committen, doe ik dat met het commando hg commit. In tegenstelling tot SVN, is een message bij je commit verplicht. Je geeft een message mee door de parameter -m mee te geven. Mijn commando ziet er bijvoorbeeld zo uit: hg commit -m "README added.". Als je niks terug krijgt, betekend dat dat alles goed is gegaan.

hg push/pull

Omdat er in een DVCS (de D in de afkorting verklapt het al, decentralized) geen centrale server is, pusht en pulled iedereen sets van commits naar/van elkaar. Dit gebeurd met de commando's hg push en hg pull.

Om een wijziging naar iemand te pushen, moet de persoon waar je naar toe pushed zijn repository openstellen. Dit kan bijvoorbeeld door de map te delen over het netwerk, of door met hg serve een hg server op te starten, waar jij vervolgens naar kan pushen: hg push http://192.168.178.10:8000. Op dat moment worden alle commits die de ander (waar jij naartoe pushed) nog niet heeft, verstuurd. Je kunt, voordat je pushed, kijken wat er gaat gebeuren door het commando hg outgoing even zijn werk te laten doen.

Om wijzigingen van iemand te pullen, gebruik je eigenlijk hetzelfde principe. De versturende partij moet zijn repository delen over het netwerk, of met hg serve een server starten, zodat jij op jouw computer het commando hg pull ipadres:poort kan doen. Ook hier kun je van te voren kijken wat er gaat gebeuren, ditmaal door het commando hg incoming te gebruiken.

Nadat je wijzigingen gepulled hebt van een ander, moet je jouw repository updaten. Dit doe je met het commando hg update. Nu kun je weer verder werken, mits er geen conflicts zijn.

Afsluitend

Hg is eigenlijk relatief simpel, en werkt heerlijk. Vooral het lokaal kunnen committen werkt super, ook voor projecten waar je maar in je eentje aan werkt. Mocht er later een tweede persoon aanschuiven, dan kan hij of zij makkelijk je repository clonen met hg clone ipadres:poort.

Al je hg projecten kun je gratis hosten bij Bitbucket, meer informatie over het gebruik van Bitbucket, meerdere heads, etc. vind je in Mercurial: The Definitive Guide.


Reacties

Er zijn op dit moment geen reacties.