It’s always interesting to me to compare different approaches to solving the
same problem. Git and Mercurial are two version control systems that came out
at similar times, trying to address very similar requirements. Git came from
a very low-level systems perspective, whereas Mercurial spent a lot of effort
on its user experience. Despite what you might think, their data models are
remarkably similar. It’s from this observation I started my side project —
gg. I found myself greatly missing the experience of Mercurial, but I’ve
resigned myself to the fact that Git is here to stay.
I came across a rather interesting challenge today while working on gg. I am
trying to replicate the behavior of hg pull
, and even though I’ve worked on gg
for over a year now, I still haven’t reached a behavior that I’m satisfied with.
I’ve finally realized why, and it boils down to a very subtle difference in the
data models of the two systems.