Differences between revisions 10 and 11
Revision 10 as of 2005-09-21 22:03:11
Size: 2807
Editor: AdrienBeau
Comment: Changed the wording somewhat
Revision 11 as of 2005-11-02 01:24:41
Size: 2994
Comment:
Deletions are marked like this. Additions are marked like this.
Line 69: Line 69:
That's all there is to it! ["Mercurial"] was able to handle the merge automatically. If we look at {{{hello.c}}}, we find that it contains ''both'' the change from {{{my-hello-new-output}}} and the change from {{{my-hello-desc}}}. That's all there is to it! ["Mercurial"] was able to handle the merge automatically (~-but note that, although it will not pop up a GUI merge tool, the {{{hgmerge}}} program will nonetheless be called under the covers also in this scenario, so it must be on your path-~). If we look at {{{hello.c}}}, we find that it contains ''both'' the change from {{{my-hello-new-output}}} and the change from {{{my-hello-desc}}}.

Tutorial - Merging changes

In TutorialExport, we learned how to share a change with another person. But since (as of version 0.7) ["Import"] isn't functional enough to handle emailed merges correctly, we're going to demonstrate merging by pulling from another repository that has made an incompatible change.

First, we must create something to merge. Let's ["Clone"] the my-hello repository again:

$ cd ..
$ hg clone my-hello my-hello-desc

We are going to give hello.c a description in its comment section.

$ cd my-hello-desc
$ vi hello.c

Let's change the second line from this:

 * hello.c

to this:

 * hello.c - hello, world

Let's save and quit the editor, and ["Commit"] our change. This time, we save some time by using the -m option to the commit command, to spare us from being dropped into an editor:

$ hg commit -m 'Add description of hello.c'

At this point, we have made one change to hello.c in the my-hello-new-output ["Repository"], and another change to hello.c in the my-hello-desc ["Repository"]. How do we merge these two diverging lines of development? Will there be a problem when we want to pull from one into the other?

This works just fine. While still in my-hello-desc, let's ["Pull"] the changes from my-hello-new-output and see what happens:

$ hg pull ../my-hello-new-output
pulling from ../my-hello-new-output
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg update' to get a working copy)

This looks just like the output of pull from TutorialShareChange! So all we have to do is an ["Update"] now, right?

$ hg update
this update spans a branch affecting the following files:
 hello.c (resolve)
aborting update spanning branches!
(use update -m to merge across branches or -C to lose changes)

Nope. Something has happened. ["Mercurial"] is telling us that we must ["Merge"] the changes that we made in each ["Repository"]. This sounds painful, right? It's actually very easy. Let's follow the instructions of the last line of output:

$ hg update -m
merging hello.c

That's all there is to it! ["Mercurial"] was able to handle the merge automatically (but note that, although it will not pop up a GUI merge tool, the hgmerge program will nonetheless be called under the covers also in this scenario, so it must be on your path). If we look at hello.c, we find that it contains both the change from my-hello-new-output and the change from my-hello-desc.

When working with changes made by other people, this is the kind of merge you will end up performing most of the time.

Let us continue on, however, and learn how to deal with situations where conflicting changes have been made in TutorialConflict.

TutorialMerge (last edited 2012-11-06 16:18:47 by abuehl)