What are the best and must-have hg / mercurial extensions? [closed]
I've been dabbling with hg / mercurial lately, namely in conjunction with Fogcreek's Kiln, and I'm trying to figure out what the must-have extensions are. Its a little tricky sifting through their extension list because I'm not interested in testing any buggy or impractical extensions, even if their description sounds awesome.
So, which hg extensions do you use?
See Using Extensions
My own hit list:
The simple ones you must have:
-
color
: colorize output from commands likediff
andstatus
, which makes it easier to assess. -
pager
: browse long output a page at a time. -
fetch
: pull, update and merge from another repo in one step. -
graphlog
: display revision graphs in your shell, incredibly useful for looking at the branches in your log history. -
hgk
: browse the repository with a graphical interface (see also TortoiseHg and Murky)
If you enable pager
, you should configure it to not interfere with certain commands:
[pager]
pager = LESS='FSRX' less
ignore = version, help, update, serve, record
The intermediate extensions I highly recommend (and use frequently):
-
record
: lets you interactively select hunks of files to commit - perfect for when you are in the middle of one set of changes, and you end up fixing something that should have its own commit. -
extdiff
: configure an external diff tool (such as meld) -
share
: have multiple clones use the same repo history
The Advanced extensions I would not be without:
-
mq
: manage a stack of patches. Very powerful, allows layering of patches on top of the tree. -
notify
: send email notifications when a repo is changed. -
rebase
: reapply local changes on top of a new parent revision. -
largefiles
: work with large binary files outside the hg store
All the above are bundled with Mercurial, and are stable and well-tested. I highly recommend all of them.
Non-core extensions worth investigating:
-
shelve
: selectively put aside changes (at the granularity of hunks) and restore them. -
acl
: selectively allow access to different parts of the repository tree
Superseded extensions and migrated to core (info from @durin42):
-
forest
was been superseded by thesubrepo
support introduced in v1.3 -
bookmarks
is in core and always enabled -
transplant
is superseded bygraft
, a core command -
histedit
is in core as of v2.3, but is disabled by default -
inotify
is not recommended, as there is apparently a bug due to a race condition
graphlog
and mq
are especially tasty.
- Convert: convert to and from other systems
- Mq (Mercurial Queues): deal with changes as a stack of patches
- Forest: lets you commit to and update many nested Mercurial repositories at once
- Share: to save time and disk space when working with similar repositories
- Hgk: gives a graphical view of history
- Graphlog: I always type 'hg glog' not 'hg log'. An ascii art view of history
- Transplant: Useful when you only want to merge a few changesets from another branch. The newer
hg rebase
may have some overlap. - Rebase: A different way to deal with changes as a set of changesets on top of a branch.
git
users like to rebase. May replacemq
for many use cases. - Shelve: A place to stash the working copy's changes if you have to work on something else for a while.
- Bookmarks: Name the newest commit on a particular branch. Similar to
git
branches.