From my daily experience with both Mercurial and Git, i would say the exact opposite. I can't think of anything that Git does better than Mercurial. I can certainly think of things it does in a needlessly more complicated way - the handling of remote tracking branches and the use of the index are obvious ones. Git's fixation on branches over commits is a persistent deep source of pain for users around me. And you can pry revsets from my cold, dead hands.
Now, there was a time when Mercurial didn't have bookmarks. During that time, if you wanted a good lightweight branching model, Git was your only option (er, well maybe bzr or Darcs were, who knows). I was never that excited about lightweight branching; the weight of heavyweight branches does not seem substantial. Today, Mercurial has bookmarks that work pretty much like Git branches, so this advantage has evaporated.
[ui]
editor = emacs -nw
[extensions]
color =
pager =
record =
graphlog =
purge =
progress =
transplant =
[pager]
pager = LESS='FSRX' less
attend = annotate, cat, diff, export, glog, log, qdiff, heads
histedit and rebase are also useful but not for my usual workflows.- The transplant extension has become the "graft" core command (do "hg help graft" for more details) - The graphlog extension functionality has been rolled into the core log command. You must simply use the --graph (or the equivalent -G) flag.
Thanks for the tip.
[alias]
glog = log --graph
I guess.Read this part of the git manual:
man git-rebase | grep -P "^RECOVERING" -A200 | less
Phases are actually a feature that git wants (last idea here):
https://github.com/peff/git/wiki/SoC-2012-Ideas
You have some ways you can work with this in hg using phases. One example is to mark the repo you're publishing to as non-publishing so that hg knows it's safe to edit history pushed to that repo. Another way is to just tell hg that you know better and to use "hg phase --force --draft" whatever commits you want to histedit or rebase.
What you need is to make your backup repository non-publishing. Just drop these lines in your .hg/hgrc file inside repo:
[phases]
publish = FalseTo set it for your user globally, in your .hgrc put "merge=internal:merge" under [ui].
I am using Git on Windows on a current project and it is still far from what Mercurial was offering on my previous project in terms of usability and resilience to infrastructure issues.
Which part exactly? Git seamlessly integrates into Putty/PLink/Pageant and tortoise-git does the same. Git also has excellent support for end of line conversions. Mercurial last time I was checking required an extension to deal with line endings.
The mercurial server is hosted on the same server and works without issues.