<story><title>What&apos;s New in Mercurial 3.0</title><url>http://hglabhq.com/blog/2014/4/29/what-s-new-in-mercurial-3-0</url></story><parent_chain><item><author>wirrbel</author><text>While a lot of tutorials mention how complicated git is in contrast to mercurial I - being a git native - feel the other way around. Git is intuitive with a small number of concepts necessarry to grasp my whole workflow.&lt;p&gt;Using this workflow with mercurial is really frustrating when I do it - the occasional pull request for a python-based project. A git branch as a concept is really simple, the mercurial ways I just cant wrap my head around (granted I only use it occasionally).&lt;p&gt;As a platform I like how all the porcellain in mercurial  is implemented in a high level python. I can only wonder how productive writing custom porcellain commands in mercurial is given that interface.</text></item></parent_chain><comment><author>gecko</author><text>There are two things people mean when they say Git is complicated.&lt;p&gt;Some people mean that Git&amp;#x27;s &lt;i&gt;model&lt;/i&gt; is complicated, which what you&amp;#x27;re talking about.  I actually find its model very simple, some people find it complicated, but at any rate, I certainly think Git and Mercurial have comparable complexity in the model.&lt;p&gt;What most people mean, though, is that Git&amp;#x27;s &lt;i&gt;UI&lt;/i&gt; is complicated.  To be blunt, I think this is simply objectively correct.  For example, &amp;quot;git checkout foo&amp;quot; might mean go to the foo branch, or might mean revert a file called &amp;quot;foo&amp;quot;.  There is no way to know.  If you want to be sure to revert a file called foo, you can do &amp;quot;git checkout -- foo&amp;quot;, I believe, but I don&amp;#x27;t know a branch equivalent (and it at any rate won&amp;#x27;t be symmetrical).  Want to create a new branch?  That&amp;#x27;s &amp;quot;git checkout -b newbranch&amp;quot;.  Want to delete it?  That&amp;#x27;s &amp;quot;git branch -d newbranch&amp;quot;.  There are &lt;i&gt;tons&lt;/i&gt; of things like this in the Git UI, where commands have basically arbitrary parameters in different contexts.&lt;p&gt;Way back when Git was first created, the plan was for what is now called Git to be the underlying &lt;i&gt;implementation&lt;/i&gt; of a higher-level UI.  I really, profoundly wish that had actually panned out.  Instead, Git&amp;#x27;s low-level commands gradually grew more user-friendly until it hit the &amp;quot;good enough&amp;quot; zone.  &lt;i&gt;That&amp;#x27;s&lt;/i&gt; what people usually mean when they say Git&amp;#x27;s complicated.</text></comment>
<story><title>What&apos;s New in Mercurial 3.0</title><url>http://hglabhq.com/blog/2014/4/29/what-s-new-in-mercurial-3-0</url></story><parent_chain><item><author>wirrbel</author><text>While a lot of tutorials mention how complicated git is in contrast to mercurial I - being a git native - feel the other way around. Git is intuitive with a small number of concepts necessarry to grasp my whole workflow.&lt;p&gt;Using this workflow with mercurial is really frustrating when I do it - the occasional pull request for a python-based project. A git branch as a concept is really simple, the mercurial ways I just cant wrap my head around (granted I only use it occasionally).&lt;p&gt;As a platform I like how all the porcellain in mercurial  is implemented in a high level python. I can only wonder how productive writing custom porcellain commands in mercurial is given that interface.</text></item></parent_chain><comment><author>jordigh</author><text>&amp;gt; I can only wonder how productive writing custom porcellain commands in mercurial is given that interface.&lt;p&gt;You don&amp;#x27;t have to use Python to add more commands on top of Mercurial. Its CLI is also its API, just like git, and you don&amp;#x27;t typically have to use Python to write tools on top of hg, just like you don&amp;#x27;t typically need to write C to hack on top of git.&lt;p&gt;The stdout of hg is guaranteed to remain stable, so you can script it by just parsing stdout. The options are guaranteed to remain stable, so your old tools won&amp;#x27;t need to be updated in case hg&amp;#x27;s CLI some day changes, because its CLI never changes.&lt;p&gt;There are also a bunch of hg CLI commands that start with debug (e.g. hg debugparents or hg debugdag) that you can use to directly manipulate hg&amp;#x27;s internal revlog data structure and do fun things like create a corrupt repo, if that&amp;#x27;s what you want to do. :-)</text></comment>