##// END OF EJS Templates
Merge with TAH...
Merge with TAH -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Merge with TAH manifest hash: f73215065ecbcfd9a0d0964de5ed73a392837a56 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCsQqNywK+sNU5EO8RAiuOAJ4lL23LcxAkbPHy33snasBgrkhNxQCgkBLO ohB0/EA2dAvQtu5sMSW03D8= =lF8D -----END PGP SIGNATURE-----
mpm@selenic.com -
r377:e5d769af merge default
Show More
Name Size Modified Last Commit Author
contrib
doc
mercurial
templates
tests
.hgignore Loading ...
.hgtags Loading ...
MANIFEST.in Loading ...
PKG-INFO Loading ...
README Loading ...
TODO Loading ...
comparison.txt Loading ...
hg Loading ...
hgeditor Loading ...
hgmerge Loading ...
hgweb.cgi Loading ...
notes.txt Loading ...
rewrite-log Loading ...
setup.py Loading ...

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 linux/
$ 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 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 # 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 the self-hosting hg 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 co # merge changes into your working directory

# Set up a CGI server on your webserver
foo$ cp hgweb.cgi ~/public_html/hg-linux/index.cgi
foo$ emacs ~/public_html/hg-linux/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
hgweb = http://edge2.net/hg/hgweb/
hgdoc = http://edge2.net/hg/man/