Differences between revisions 1 and 10 (spanning 9 versions)
Revision 1 as of 2008-02-10 09:28:32
Size: 2638
Editor: abuehl
Comment: split out from FAQ
Revision 10 as of 2010-01-16 15:55:04
Size: 729
Editor: abuehl
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
== General Usage ==
Line 5: Line 3:
The merge process is simple. Usually you will want to merge the tip
into your working directory. Thus you run {{{hg merge}}} and Mercurial
will incorporate the changes from tip into your local changes.

The first step of this process is tracing back through the history of
changesets and finding the 'common ancestor' of the two versions that
are being merged. This is done on a project-wide and a file by file
basis.

For files that have been changed in both projects, a three-way merge
is attempted to add the changes made remotely into the changes made
locally. If there are conflicts between these changes, the user is
prompted to interactively resolve them.

Mercurial uses a helper tool for this, which is usually found by the
hgmerge script. Example tools include tkdiff, kdiff3, and the classic
RCS merge.

After you've completed the merge and you're satisfied that the results
are correct, it's a good idea to commit your changes. Mercurial won't
allow you to perform another merge until you've done this commit as
that would lose important history that will be needed for future
merges.
See [[Merge|merge]]
Line 31: Line 7:
First, merge often! This makes merging easier for everyone and you
find out about conflicts (which are often rooted in incompatible
design decisions) earlier.

Second, don't hesitate to use multiple trees locally. Mercurial makes
this fast and light-weight. Typical usage is to have an incoming tree,
an outgoing tree, and a separate tree for each area being worked on.

The incoming tree is best maintained as a pristine copy of the
upstream repository. This works as a cache so that you don't have to
pull multiple copies over the network. No need to check files out here
as you won't be changing them.

The outgoing tree contains all the changes you intend for merge into
upsteam. Publish this tree with {{{hg serve}}} or hgweb.cgi or use
{{{hg push}}}
to push it to another publicly availabe repository.

Then, for each feature you work on, create a new tree. Commit early
and commit often, merge with incoming regularly, and once you're
satisfied with your feature, pull the changes into your outgoing tree.
See [[WorkingPractices]]
Line 56: Line 11:
See ConvertingRepositories for various tips. See [[ConvertingRepositories]] for various tips.
Line 60: Line 15:
See WindowsInstall for getting started using Windows. See [[WindowsInstall]] for getting started using Windows.

Like TortoiseSVN, [[http://www.selenic.com/pipermail/mercurial/2010-January/029680.html|we recommend]] to turn off the indexing service
on the working copies and repositories, and exclude them from virus scans.
Line 64: Line 22:
See ["GUIClients"] for information on graphical merge tools and other front-ends. See [[OtherTools]] for information on graphical merge tools and other front-ends.

How does merging work?

See merge

What are some best practices for distributed development with Mercurial?

See WorkingPractices

How do I import from a repository created in a different SCM?

See ConvertingRepositories for various tips.

What about Windows support?

See WindowsInstall for getting started using Windows.

Like TortoiseSVN, we recommend to turn off the indexing service on the working copies and repositories, and exclude them from virus scans.

Is there a GUI front-end?

See OtherTools for information on graphical merge tools and other front-ends.

FAQ/GeneralUsage (last edited 2012-11-06 15:04:49 by abuehl)