hg-stable /

Filename Size Date modified Message
mercurial
tests
52 B
89 B
233 B
2.8 KB
1.6 KB
hg
11.3 KB
7.2 KB
6.4 KB
503 B
45 B

Setting up Mercurial in your home directory:

Note: Debian fails to include bits of distutils, you'll need python-dev to install. Alternately, shove everything somewhere in your path.

$ tar xvzf mercurial-<ver>.tar.gz $ cd mercurial-<ver> $ python2.3 setup.py install --home ~ $ export PYTHONPATH=${HOME}/lib/python # add this to your .bashrc $ export HGMERGE=tkmerge # customize this $ 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 linux/ $ hg init # creates .hg $ hg status # show changes between repo and working dir $ hg diff # generate a unidiff $ hg export # export a changeset as a diff $ hg addremove # add all unknown files and remove all missing files $ hg commit # commit all changes, edit changelog entry

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 history # show changesets $ hg log Makefile # show commits per file $ hg checkout # check out the tip revision $ hg checkout <hash> # check out a specified changeset $ hg add foo # add a new file for the next commit $ hg remove bar # mark a file as removed $ hg verify # check repo integrity

Branching and merging:

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

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

Network support:

The simple way:

# pull the self-hosting hg repo foo$ hg init foo$ hg merge http://selenic.com/hg/ foo$ hg checkout # hg co works too

# export your .hg directory as a directory on your webserver foo$ ln -s .hg ~/public_html/hg-linux

# merge changes from a remote machine bar$ hg merge http://foo/~user/hg-linux

The new, fast, experimental way:

# pull the self-hosting hg repo foo$ hg init foo$ hg merge hg://selenic.com/hg/ foo$ hg checkout # hg co works too

# Set up the CGI server on your webserver foo$ ln -s .hg ~/public_html/hg-linux/.hg foo$ cp hgweb.py ~/public_html/hg-linux/index.cgi

# merge changes from a remote machine bar$ hg merge hg://foo/~user/hg-linux

Another approach which does perform well right now is to use rsync. Simply rsync the remote repo to a read-only local copy and then do a local pull.

Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.