

Python now uses Mercurial - jonknee
http://hg.python.org/cpython/

======
js2
I was confused why this was news since the decision was made two years ago:

[http://mail.python.org/pipermail/python-
dev/2009-March/08793...](http://mail.python.org/pipermail/python-
dev/2009-March/087931.html)

But I see from <http://www.python.org/dev/peps/pep-0385/> that it's taken that
long to migrate away from svn.

------
vimalg2
Git and Hg accomplish essentialy the same thing. The platform support and
tool/utility support for Mercurial on windows in important to note.

I decided to choose Mercurial as the VCS for my 'work'. This was a team that
had no prior exposure to VC before. And works in a mixed environment. Hg
follows the 'one true way' philosophy of Python; so there's just a single
command to learn for each task. Plus, Bitbucket's new Free pricing plan for
tiny teams convinced me to go with it for online hosting(rather than roll our
own hg server over vpn)

Though, If I had to choose a host/vcs for 'my awesome FOSS community project',
it would go on Github.

~~~
int3
As someone who hasn't used Hg before, I'm curious -- what are some examples of
Git commands that are better executed in Hg?

~~~
viraptor
No specific commands really, but I think the whole hg UI is just more
consistent. I use both, yet with git I have to revert to `man` almost every
day :/

Compare: `git branch xxx / git branch -a`, `git tag xxx / git tag -l`, `git
show-ref --heads`

To: `hg branch xxx / hg branches`, `hg tag xxx / hg tags`, `hg heads`

There are also "duplicates" that I'm not sure why aren't folded into one
command: `show-branch/branch`, `show xxx` which is `diff -c xxx` in many other
systems, etc.

These are just simple cases, but there's loads of situations where you have to
find out yet another command in git / yet another parameter to do what you
want. Hg has better defined defaults and the whole list of commands looks like
it was designed, while git looks like everyone just added what they needed...
Auto-expanding commands in hg is also nice - I hate it when git tells me 'ci'
or other short name is not a command (yeah, I know about aliases).

In some situations I also think that git does exactly what it's programmed to
do... which isn't always the same as - what workflow makes sense in a specific
case. For example `branch` creates a branch, but you still need to do
`checkout` (or just `checkout -b ...`). Why? What's the common use case for
creating a branch you're not going to work on? Which behaviour do you expect
more often?

All in all, not the end of the world, but when you use the tool every day, it
becomes annoying, especially if you see it can be done better.

~~~
X-Istence
There have been times that I've created a branch just to have a stopping point
to which I can go back, but I wasn't going to do any work on it, at least not
yet, like two choices on how to re-factor something, try one, if it fails try
the other, but keep both around for testing.

~~~
koko775
Hope this helps, then:

git tag -a tagname

git push --tags

git checkout tagname

<http://git.or.cz/course/svn.html>

BTW, it's also worth noting that hg can have tag merge conflicts
(<http://mercurial.selenic.com/wiki/GitConcepts>), which is just weird.

For anyone looking to learn more about git, I haven't found a better resource
than this talk: (video) <http://blip.tv/file/4094854> (slides)
<http://www.slideshare.net/chacon/getting-git>

That said, I migrated from hg to git, and I love them both way more than svn.

------
jarin
It's interesting that each major web language seems to have paired off with a
different VCS:

\- Python + Hg

\- Ruby + Git

\- PHP + ...SVN?

~~~
burgerbrain
_PHP + ...SVN?_

Gotta say, they deserve each other.

~~~
bluesnowmonkey
You know, comments like that disparage by implication anyone who finds value
in PHP or SVN. That's a big chunk of the development community. It tears
people apart rather than bringing them together. Maybe you should redirect
your energy from snark and criticism toward something more constructive.

~~~
jrockway
_You know, comments like that disparage by implication anyone who finds value
in PHP or SVN._

Maybe if we disparage them enough they'll switch to a real programming
language and version control tool.

~~~
X-Istence
Why is PHP not a "real" programming language? Why is subversion not a "real"
version control tool?

Yes, I've programmed in PHP and know it has some downsides, and that it has
some big warts that are ugly, but it is a real programming language. Real
projects are built with PHP.

Now I understand the frustration with Subversion, but it still is a version
control system that is used in the real world. Would I love it if everyone
decided to move away from SVN and onto something more capable like Git or
Mercurial, yes, but that doesn't mean we have to belittle people who are using
those tools.

~~~
japherwocky
PHP is the Walmart of languages, everyone uses it because everyone uses it,
but nobody really has anything _good_ to say about it.

~~~
chris_j
I wasn't going to jump into this discussion but that isn't very fair. I don't
use PHP myself and am not a fan of it but here are some reasons why I think it
is popular:

1) It's very easy to get started with, even if you're not a great programmer
(or even if you have never programmed before). Just start with pure HTML and
then add a few <?php> tags. 2) Lots of PHP hosting available, much of it free.
3) Loads of frameworks and libraries available.

I'm sure a PHP fan could come up with a few more.

~~~
japherwocky
2 and 3 are not really advantages for PHP, as the same can be said for most
any language.

I think #1 is the big reason that PHP is as popular as it is, but that
"feature" has a funny smell among programmers who don't like to mix languages.

------
alok-g
Interesting to note that bzr got close to mercurial in the votes in spite of
this being bzr version 1. Version 2 is much improved in speeds (comparable to
git/hg).

~~~
wh-uws
I myself am quite partial to bzr espeically since tortoise-bzr uses my
favorite diff tool by default

[http://doc.bazaar.canonical.com/explorer/en/guide/qbzr/qdiff...](http://doc.bazaar.canonical.com/explorer/en/guide/qbzr/qdiff.html)

I would be interested to know about other's impressions of bazaar and why most
people seem to share the same sentiment towards it as those at pycon that year

 _While no one said they did not want bzr chosen, no one said they did
either._

~~~
prog
I have been using bzr for 2+ years now. For personal projects I am quite happy
with bzr+launchpad. At work, we have been using bzr on Linux.

The move from 1.x to 2.x brought in significant performance and memory
improvements.

------
egor83
Announcement in Python-Dev:

[http://mail.python.org/pipermail/python-
dev/2011-March/10873...](http://mail.python.org/pipermail/python-
dev/2011-March/108738.html)

------
tzury
via Guido (<http://twitter.com/#!/gvanrossum/status/44169137240551424>)

For those asking "why not git", read
<http://www.python.org/dev/peps/pep-0374/>

------
geekam
But why are they using Mercurial and not Git? I want to what are the
advantaged for them to choose Hg.

~~~
tghw
I find the way your phrase that question interesting. Git and Mercurial are
nearly identical in terms of functionality, to the point that converting back
and forth between them is pretty trivial. (Example: here's Git's repository in
Mercurial <https://mirrors.kilnhg.com/Repo/Mirrors/From-Git/Git>)

The only real difference between the two are the ecosystems. Mercurial, being
written is Python, is very portable and easily extensible. I feel like,
because of that, the tools for Mercurial are better. Git has GitHub, and the
incredible open source community they've developed there.

* Note, the rainbow road is due to one of the few differences between Git and Hg: Hg does not allow octopus merges, so the conversion turns them to a sequence of two at a time merges. Also, in the interest of full disclosure, I'm one of the devs on Kiln, so I'm certainly biased towards Hg.

~~~
js2
octopus merges are rare in the git.git repo:

    
    
      $ git rev-list --merges --parents --tags | awk '{print (NF-1)}' | sort | uniq -c
      4409 2
        22 3
         5 4
         3 5
         1 6
    

So there's been a total of 31 octopus merges compared to 4409 typical two-
parent merges.

~~~
burgerbrain
On the other hand, roughly an entire 2% of merges on linus's linux tree have
been octopus merges. Hardly something to scoff at.

    
    
          5 10
          6 11
          5 12
          3 13
          2 14
          1 18
      14592 2
          1 20
          1 21
          1 24
        129 3
          1 30
         50 4
         25 5
         21 6
         13 7
         18 8
          7 9

~~~
lloeki
Relative occurence numbers don't say much about the need for octopus. Maybe
they're rare but when the need arises it proves to be an invaluable feature.

------
epynonymous
makes sense since mercurial is written in python, it's like eating your own
dogfood in some senses.

