On Sat, Jul 02, 2005 at 02:11:34PM -0700, Matt Mackall wrote:
# HG changeset patch
# User Alecs King <alecsk@gmail.com>
On Sat, Jul 02, 2005 at 02:11:34PM -0700, Matt Mackall wrote:
> On Sun, Jul 03, 2005 at 12:49:27AM +0800, Alecs King wrote:
> > Hg is really very nice. The only feature i miss from git is the
> > whatchanged -p, which shows a diff along with a changeset.
> > python before, i just dig into the mercurial/commands.py a while and
> > see what diff(), dodiff(), export(), show_changeset(), log() would
> > normally do. There might be one thing or two missed or wrong. But here
> > it is: a '-d' option to 'hg log' showing the diff info. You can use 'hg
> > log -d' to show the whole history with the diff or 'hg log -d <file>' to
> > show that info of a particular file. And also works with the '-r'
> > option.
>
> Let's use -p. We're going to be combining the global and per command
> switch namespace shortly and the global -p will disappear.
Okay. '-d' changed to '-p'. Just like 'whatchanged -p', now we have
'hg log -p'.
> Also, the argument list for show_changeset is getting a bit unwieldy.
This time i remain show_changeset untouched at all. Only changed some
bits of log().
MERCURIAL QUICK-START
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 # (or lib64/ on some systems)
$ export PATH=${HOME}/bin:$PATH # add these to your .bashrc
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/