SDL in Mercurial!

(Fwiw, we converted to Subversion on April 26th, 2010.

Uh, 2006, not 2010.

–ryan.

Hello,

Without wanting to call a flame war, I’m curious as to why you’ve chosen
Mercurial over other decentralized version control systems like say GIT
or Bazaar.

(Really, this is the question I expected, not “why move from Subversion?”)

That surprised me a lot too :).

These are my primary reasons for choosing Hg over Git:

  • Mercurial works better on Windows at the moment. Git used to need
    Cygwin, and the msysgit project doesn’t seem that active. Also, I’ve
    seen a few too many comments from the Git developers that suggest they
    aren’t at all concerned about being hostile to users on Mac OS X and
    Windows. As git’s original purpose is to help the Linux kernel
    developers, I guess that’s not surprising, and if SDL wasn’t so
    concerned with portability, it wouldn’t be a big deal. Fwiw, git seems
    to be largely interested in Unix, but Mercurial does need Python to
    run, so we’re probably going to have problems with obscure systems that
    worked with Subversion. But the ones we really care about: Windows,
    Linux, and Mac OS X? Mercurial is sweet.

Yeah, Mercurial probably wins there. I’ve got some of my users running
git on windows and mac os x, but I do believe it is harder especially if
you want to avoid msys and friends on windows.

  • I personally find Mercurial to be a little easier to use. I think it’s
    a little more welcoming to people migrating from Subversion, too. I
    think that git’s index is a little scary to new users (indeed, Mercurial
    Queues are probably moreso, but they’re optional).

Probably true there also.

Going to throw my 2 cents although it’s probably a bit superfluous. I
used to use SVN, then did the switch ~4 years back to HG. About 2 years
ago did the jump to GIT. From what I’ve seen, Mercurial is a bit more
newbie-friendly then GIT. However GIT is much faster and from what
I’ve experienced seems to handle merges much better. I’m probably too
used to it now, but I’ve never really had an issue with branches and
tags with GIT, however I remember having a hard time with named branches
in HG. However that was a while ago and it’s probably better.

As you mentioned, they are both functionally identical (decentralized
version control) and a MAJOR jump over CVS/SVN imho. IMHO the
difference between HG/GIT mainly boils down to what you’re used to and
maybe in some niche areas one will be better then the other.

EdgarOn 2010?02?27? 21:47, Ryan C. Gordon wrote:

why not eh? seems a new versioning system appears every year or so, keeps
you on your toes etc, really who gives a crap, oh! everyone who replied
negativley to ryans post :wink:

ok i’ll stop reading sdl list and posting irrelevant crap now.

I think this is great. If for no other reason, it will give me a
concrete excuse to mess around with a distributed versioning system,
which is something I’ve been wanting to do for a while.

Wow, this is freaking fast!

hg clone http://hg.libsdl.org/SDL
… yup, it’s SDL 1.3!
hg clone SDL SDL-1.2
cd SDL-1.2
hg update SDL-1.2
… yup, it’s SDL 1.2!

time on my machine:
real 0m22.740s
user 0m8.376s
sys 0m1.942s

Woo!

Wow, this is freaking fast!

hg clone http://hg.libsdl.org/SDL
… yup, it’s SDL 1.3!
hg clone SDL SDL-1.2
cd SDL-1.2
hg update SDL-1.2
… yup, it’s SDL 1.2!

time on my machine:
real 0m22.740s
user 0m8.376s
sys 0m1.942s

Woo!

woooooooooooooooooooooooooo

we are so easilly pleased :wink: if only ordering a pizza was this fastOn 28 February 2010 08:40, Sam Lantinga wrote:

I couldn’t find any recent benchmarks for hg and git, so here’s one. I
cloned the SDL hg repo, and converted it to git using
http://hg-git.github.com/ . Unfortunately this only cloned the default
branch, so I cloned a new hg repo with just the default branch for a
fair comparison. Each repo has 3229 commits, and all tests are
cache-hot.

  1. version
    $ hg version
    Mercurial Distributed SCM (version 1.4.1)
    $ git version
    git version 1.6.4.4

  2. Statusing -
    hg$ time hg status

real 0m0.343s
user 0m0.304s
sys 0m0.039s

git$ time git status

On branch master

nothing to commit (working directory clean)

real 0m0.039s
user 0m0.015s
sys 0m0.016s

  1. Full log (not that useful in practice, but it shows both repos have
    the same number of commits) -
    hg$ time hg log | grep ^changeset: | wc -l
    3229

real 0m2.300s
user 0m2.270s
sys 0m0.040s

git$ time git log | grep ^commit | wc -l
3229

real 0m0.366s
user 0m0.324s
sys 0m0.042s

  1. Local clone (I run hg in quiet mode so it doesn’t print all the
    files it’s checking out to make sure text scroll doesn’t slow it down)On 2/28/10, Sam Lantinga wrote:

Wow, this is freaking fast!

hg clone http://hg.libsdl.org/SDL
… yup, it’s SDL 1.3!
hg clone SDL SDL-1.2
cd SDL-1.2
hg update SDL-1.2
… yup, it’s SDL 1.2!

time on my machine:
real 0m22.740s
user 0m8.376s
sys 0m1.942s

Woo!

hg$ time hg clone -q newSDL newSDL2

real 0m4.134s
user 0m3.616s
sys 0m0.511s

git$ time git clone gitSDL gitSDL2
Initialized empty Git repository in /home/mjs/sdltmp/gitcheckout/gitSDL2/.git/

real 0m0.717s
user 0m0.407s
sys 0m0.173s

Results:
hg real / git real = 8.79, 6.28, 5.76 slower

Note it’s entirely possible I’ve messed something up to make these
results invalid, so if anyone else tries a test and comes up with
different results let me know!

Anyway I can’t speak to the non-quantifiable aspects of the two - I
just thought a side-by-side comparison would be interesting :slight_smile:

-Mike