Differences between revisions 1 and 6 (spanning 5 versions)
Revision 1 as of 2005-08-26 00:57:54
Size: 2731
Editor: waste
Comment:
Revision 6 as of 2005-08-26 01:33:22
Size: 2757
Editor: waste
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
== ["Tutorial"] - Merging changes == == Tutorial - Merging changes ==
Line 5: Line 5:
First, we must create a reason to merge. Let's ["Clone"] the ''my-hello'' repository again: First, we must create a reason to merge. Let's ["Clone"] the {{{my-hello}}} repository again:
Line 10: Line 10:
Line 11: Line 12:

We are going to give ''hello.c'' a description in its comment section.
We are going to give {{{hello.c}}} a description in its comment section.
Line 17: Line 17:
Line 18: Line 19:
Line 23: Line 23:
Line 24: Line 25:
Line 29: Line 29:
Line 30: Line 31:

Let's save and quit the editor, and ["Commit"] our change. This time, we save a few moments by using the ''-m'' option to the ''commit'' command, to save us from being dropped into another editor:
Let's save and quit the editor, and ["Commit"] our change. This time, we save a few moments by using the {{{-m}}} option to the {{{commit}}} command, to save us from being dropped into another editor:
Line 35: Line 35:
Line 36: Line 37:
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"]. Will there be a problem when we want to pull from one into the other?
Line 37: Line 39:
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"]. 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"] those changes from ''my-hello-new-output'' and see what happens:
This works just fine. While still in {{{my-hello-desc}}}, let's ["Pull"] those changes from {{{my-hello-new-output}}} and see what happens:
Line 50: Line 50:
Line 51: Line 52:

This looks just like the output of ''pull'' from TutorialShareChange! So all we have to do is an ["Update"] now, right?
This looks just like the output of {{{pull}}} from TutorialShareChange! So all we have to do is an ["Update"] now, right?
Line 60: Line 60:
Line 61: Line 62:
Line 69: Line 69:
Line 70: Line 71:
And that's all there is to it; ["Mercurial"] was able to handle the merge completely automatically. If we look at {{{hello.c}}} now, we find that it contains''both'' the change from {{{my-hello-new-output}}} and the change from {{{my-hello-desc}}}.
Line 71: Line 73:
And that's all there is to it; ["Mercurial"] was able to handle the merge completely automatically. If we look at ''hello.c'' now, we find that it contains /both/ the change from ''my-hello-new-output'' and the change from ''my-hello-desc''.

Much of the time, when you are working with changes made by other people, this is the /only/ kind of merge you will need to perform.
Much of the time, when you are working with changes made by other people, this is the''only'' kind of merge you will need to perform.

Tutorial - Merging changes

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

First, we must create a reason 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 a few moments by using the -m option to the commit command, to save us from being dropped into another 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"]. 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"] those 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 revisions
 modified 1 files, added 1 changesets and 1 new revisions
 (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 perform a branch merge)

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. We simply follow the instructions:

 $ hg update -m
 merging hello.c

And that's all there is to it; ["Mercurial"] was able to handle the merge completely automatically. If we look at hello.c now, we find that it containsboth the change from my-hello-new-output and the change from my-hello-desc.

Much of the time, when you are working with changes made by other people, this is theonly kind of merge you will need to perform.

Let us continue on, 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)