I learned Mercurial first and found the vast majority of its commands to be highly intuitive for the 4 core actions of a distributed version control system
1) Check-pointing code
2) Jumping back (or sideways) in time
3) Sending code to others
4) Receiving code from others
However, once I really understood the distributed version control model, I found myself thinking in terms of the DAG and wanting more control over it. I started viewing my version control system as a tool for more than just version control. I started viewing it as a tool for understanding and communicating about my code. I started using it as a tool to manipulate my code.
Then, for one small project, I tried Git. It drove me NUTS for about a week. I was going to smash things. I was so angry about it using stupid cryptic terms for simple things. I was annoyed by the complexity of overloaded, highly flexible commands. But once I translated the vocabulary, the commands stopped seeming so complex. Instead, they seemed like a reasonable abstractions. Each of the sub-operations they can perform are really just specializations of one kind of operation. It became second nature. I started doing swiss-army-knife voodoo with Git that Mercurial could only accomplish with a giant pile of half-baked plugins, blood, sweat, and tears.
Now, I only use Git.
tldr: Git is a more abstract, more powerful tool than any mere version control system. This is only something you come to appreciate with experience.
From things as simple as "git stash" to anything you'd use Mercurial's MQ extension for and beyond. Also, the Index, a concept which I initially wrote off as a frustrating extra step, turns out to be super useful for moving around chunks of code quickly.
Comments
I learned Mercurial first and found the vast majority of its commands to be highly intuitive for the 4 core actions of a distributed version control system
1) Check-pointing code 2) Jumping back (or sideways) in time 3) Sending code to others 4) Receiving code from others
However, once I really understood the distributed version control model, I found myself thinking in terms of the DAG and wanting more control over it. I started viewing my version control system as a tool for more than just version control. I started viewing it as a tool for understanding and communicating about my code. I started using it as a tool to manipulate my code.
Then, for one small project, I tried Git. It drove me NUTS for about a week. I was going to smash things. I was so angry about it using stupid cryptic terms for simple things. I was annoyed by the complexity of overloaded, highly flexible commands. But once I translated the vocabulary, the commands stopped seeming so complex. Instead, they seemed like a reasonable abstractions. Each of the sub-operations they can perform are really just specializations of one kind of operation. It became second nature. I started doing swiss-army-knife voodoo with Git that Mercurial could only accomplish with a giant pile of half-baked plugins, blood, sweat, and tears.
Now, I only use Git.
tldr: Git is a more abstract, more powerful tool than any mere version control system. This is only something you come to appreciate with experience.
Can you provide a concrete example of DAG editing which you had trouble doing with Mercurial?
From things as simple as "git stash" to anything you'd use Mercurial's MQ extension for and beyond. Also, the Index, a concept which I initially wrote off as a frustrating extra step, turns out to be super useful for moving around chunks of code quickly.