Hacker News new | ask | show | jobs
by tjbarbour 4847 days ago
It's good to see FogCreek being practical and adding in Git support, based on how strong they were pushing for Mercurial before (Joel even had an online training[0]) I wouldn't have guessed they would ever switch to Git, but as Joel said "Religious war: averted." I wish more software would mitigate these debates with solutions like this, but its often not that easy.

This seems like a cool solution, I don't know if any of the other big providers are doing synchronized repos, do other similar solutions exist?

[0]http://hginit.com/

3 comments

Devil's advocating, but I worry about solutions like this. Abstractions leak, and if abstractions like this get traction they splinter tools' abilities to do useful things. I imagine there are corner cases where git/hg dissonance is high and wonder if this leads to a situation where we all have to care about whether a backend is capable of 'full git' or 'hg-compatible git'.

There are places where this is valuable enough to be worthwhile (say.. ANSI SQL and related high-level-language database agnostic libraries). I'm not convinced source control is one of those places.

For fogcreek, they bet the farm on hg and are presumably seeing an opportunity cost to that decision that this mitigates. This makes loads of sense for them. I'm not convinced it's all that awesome for the rest of us, or for either the hg or git user bases as a whole.

Interestingly, Joel (founder of FogCreek, producer of Kiln) wrote extensively about leaky abstractions:

http://www.joelonsoftware.com/articles/LeakyAbstractions.htm...

It's because Git has won, in terms of usershare.

Bitbucket, the Mercurial hosting service, now also offers Git. Xen, the first major project to use Mercurial, just switched to Git last month. Microsoft has added Git to Visual Studio and Team Foundation Server.

Whatever Joel's personal source-control preferences were, he has to sell into a world where there are more Git users than Mercurial users.

It's unfortunate, as I preferred Mercurial, but then, Git also comes with some advantages to mitigate the disadvantages. They really were closely-matched. Which is why it was a religious war -- it boiled down to preferences.

http://www.plasticscm.com/features/lockin2.aspx

  > Plastic SCM [...] developed an importer that supports the fast-import 
  > format introduced by Git and widely used to migrate from other systems
Most source control systems assume a one-time import because they are so awesome there's no doubt you'll want to keep your code there forever, but the trend is to support at least Git semi-synchronously.

http://codicesoftware.blogspot.com/2013/01/using-plastic-scm...

http://www.perforce.com/git-fusion

http://blogs.msdn.com/b/bharry/archive/2012/08/13/announcing...

Kiln Harmony is a little bit different than that. We are aiming that you can push a Git repo to Kiln, clone out an Hg repo, push that back to Kiln in an empty repo, and get back exactly the same Git repo you started with. This means that both format types are completely equal--and, more importantly, they're both canonical.

Plastic and Perforce are solving a very important, but fundamentally different, problem: how can I use Git to interface with my proprietary SCM? These problems tend to evolve solutions like git-svn or hgsubversion, where either you're keeping the initial repository around as a base (I believe Plastic does this), or you simply don't even care about it at all (e.g., in Perforce, its repos are assembled from arbitrary slices of the main source tree, so the same commit may have different files entirely from the one your neighbor is using, even though both repos include the same chunks of history).

Those are also valuable tools, and we did consider making what would amount to a Git front-end for Mercurial. But we really wanted both systems to be peers, both canonical, and that mandated a totally different set of design decisions and restrictions.

It's not that what Plastic and Perforce have aren't cool. They're just fundamentally different.

Thanks for clarifying what I meant when I said 'at least Git semi-synchronously'.

edit: Is it safe to summarize what you're saying as 'the best hg-git is kiln' ?