git vs Mercurial

Jag har mest praktisk erfarenhet av Mercurial (eller hg) – har kört det hos kund ett par år i projekt med flera team, många komponenter och många repon. Det funkar felfritt. Eclipse-pluginen har inga allvarliga buggar, gör det mesta och med lite kärlek så kan man köra cygwin ihop med det och nästan känna sig obehindrad. (doit.py är dock smidig när man hela tiden jobbar i flera repon och behöver göra in/out/commit/push/pull – ett script som kör ett kommando i flera kataloger samtidigt och sedan visar resultatet.)

Ändå föredrar jag git, i huvudsak på grund av en enda sak: hg har en designmiss kring brancher som gör att det blir halvt omöjligt att få till ett arbetsflöde likt git flow.

Git har också brister. Sitter man på Windows kan det (tydligen) problem med icke-ASCII-tecken i filnamn t ex, och oavsett om man kör GitExtensions eller msysGit så är det inte en “riktig” Linuxmiljö som git kör i. Sannolikheten är att man snart hamnar i konsollen ändå.

För Java-världen kommer det tack vara att Eclipse väljer att standardisera på git snart vara ett enkelt val – git-pluginen (egit+jgit) kommer helt enkelt få så mycket mer uppmärksamhet än hg-pluginen och därigenom fungera så mycket bättre.

För dotnet-världen är jag inte säker på vad som kommer hända. Jag tycker att det är solklart att git (mycket tack vare github) är den som vinner den stora massan, medan hg och bitbucket är stark tvåa. TortoiseHg vet jag är stabil och kompetent. TortoiseGit har jag aldrig beblandat mig med eftersom jag inte behövt köra git på Windows. De testskott jag gjort har varit med GitExtensions. Det har sett bra ut tycker jag, med bara en miss egentligen. I senaste versionen verkar man tappat bort “view file history”.

Slutligen har hg bra medföljande dokumentation (i CLI:et iaf), trevligt skriven, lätt att förstå. Det samma kan inte sägas om git – det är mer stekpanna mot huvud-nivå på den, även om den är tekniskt korrekt och inte så frånvarande eller inkomplett som det var i början när git fick som mest kritik (för just dokumentation).

Git är mer flexibelt, kräver lite mer av användaren. Hg har en designmiss men fungerar i övrigt klockrent. Båda är mycket kompetenta distribuerade versionshanteringssystem (DVCS).

Lite länkar

Popularitet på stackoverflow En Git vs hg-tråd Bra bloginlägg om tekniska skillnader Samma skillnader och budskap, annan paketering