1. Peter Arrenbrecht
  2. hg-parren


hg-parren /

Filename Size Date modified Message
99 B
275 B
17.6 KB
349 B
232 B
3.6 KB
1.8 KB
1.6 KB
327 B
925 B
1.7 KB
283 B
6.1 KB
507 B
1.4 KB


Setting up Mercurial:

Note: some distributions fails to include bits of distutils by default, you'll need python-dev to install. You'll also need a C compiler and a 3-way merge tool like merge, tkdiff, or kdiff3.

First, unpack the source:

$ tar xvzf mercurial-<ver>.tar.gz $ cd mercurial-<ver>

To install system-wide:

$ python setup.py install # change python to python2.3 if 2.2 is default

To install in your home directory (~/bin and ~/lib, actually), run:

$ python2.3 setup.py install --home=~ $ export PYTHONPATH=${HOME}/lib/python # add this to your .bashrc $ export PATH=${HOME}/bin:$PATH #

And finally:

$ hg # test installation, show help

If you get complaints about missing modules, you probably haven't set PYTHONPATH correctly.

Setting up a Mercurial project:

$ cd project/ $ hg init # creates .hg $ hg status # show changes between repo and working dir $ hg diff # generate a unidiff $ hg addremove # add all unknown files and remove all missing files $ hg commit # commit all changes, edit changelog entry $ hg export <rev> # export a changeset as a diff

Mercurial will look for a file named .hgignore in the root of your repository contains a set of regular expressions to ignore in file paths.

Mercurial commands:

$ hg help [command] # get online help $ hg history # show changesets $ hg log Makefile # show commits per file $ hg update # check out the tip revision $ hg update <id> # check out a specified changeset

# IDs can be tags, revision numbers, or unique # subsets of changeset hash numbers

$ hg add foo # add a new file for the next commit $ hg remove bar # mark a file as removed $ hg verify # check repo integrity $ hg tags # show current tags $ hg annotate [files] # show changeset numbers for each file line

Branching and merging:

$ cd .. $ mkdir linux-work $ cd linux-work $ hg init ../linux # create a new branch $ hg update # populate the working directory $ <make changes> $ hg commit $ cd ../linux $ hg pull ../linux-work # pull changesets from linux-work $ hg update -m # merge the new tip from linux-work into

# our working directory

Importing patches:

Fast: $ patch < ../p/foo.patch $ hg addremove $ hg commit

Faster: $ patch < ../p/foo.patch $ hg commit lsdiff -p1 ../p/foo.patch

Fastest: $ cat ../p/patchlist | xargs hg import -p1 -b ../p

Exporting a patch:

(make changes) $ hg commit $ hg tip 28237:747a537bd090880c29eae861df4d81b245aa0190 $ hg export 28237 > foo.patch # export changeset 28237

Network support:

# pull from the primary Mercurial repo foo$ hg init foo$ hg pull http://selenic.com/hg/ foo$ hg update # hg co works too

# export your current repo via HTTP with browsable interface foo$ hg serve -n "My repo" -p 80

# pushing changes to a remote repo with SSH foo$ hg push ssh://user@example.com/~/hg/

# merge changes from a remote machine bar$ hg pull http://foo/ bar$ hg update -m # merge changes into your working directory

# Set up a CGI server on your webserver foo$ cp hgweb.cgi ~/public_html/hg/index.cgi foo$ emacs ~/public_html/hg/index.cgi # adjust the defaults

Symbolic repository names:

Mercurial uses an options file called ~/.hgrc. To track locations symbolically, add a section to it like this:

[paths] main = http://selenic.com/hg linux = http://www.kernel.org/hg/