Size: 3374
Comment: updates for v0.9: update -m -> merge, undo -> rollback
|
Size: 252
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
== Tutorial - merging conflicting changes == We learned how to deal with simple ["Merge"]s in TutorialMerge. ["Mercurial"] handles more complex ["Merge"] cases, too. It is not all that uncommon for two people to edit the exact same lines of a file, and then have to figure out what to do. These cases are called conflicts; figuring out what to do about a conflict is called resolving it. Let's first create an artificial conflict situation. As we did previously, let's start by making a ["Clone"] of {{{my-hello}}}: {{{ $ cd .. $ hg clone my-hello my-hello-not-cvs }}} Now let's add a new line of output to {{{hello.c}}}: {{{ $ cd my-hello-not-cvs $ vi hello.c }}} We change {{{main}}} to read like this: {{{#!cplusplus numbers=off int main(int argc, char **argv) { printf("hello, world!\n"); printf("sure am glad I'm not using CVS!\n"); return 0; } }}} And we ["Commit"] the change: {{{ $ hg commit -m 'Give thanks for dodging bullet' }}} Recall that in TutorialFirstChange, we created a ChangeSet in {{{my-hello-new-output}}} that ''also'' added a second line of output. What happens when we try to ["Pull"] that change in here? {{{ $ 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) }}} So far, so good. Let's try an ["Update"]. {{{ $ hg update this update spans a branch affecting the following files: hello.c (resolve) aborting update spanning branches! (use 'hg merge' to merge across branches or 'hg update -C' to lose changes) }}} As in TutorialMerge, we have to run {{{hg merge}}}. As before, the MergeProgram will be started under cover. It will usually not be able to ["Merge"] automatically, because the same line of the same source file has been modified in a different way by each ChangeSet (the one we just ["Commit"]ted, and the one we just ["Pull"]ed). {{{ $ hg merge }}} At this point, what happens depends on what programs are installed on our computer. If we are provident or lucky, and have a graphical MergeProgram installed, we will be able to see what conflicts there are between the two changes, and decide how to resolve them. ["Mercurial"] is using a per-file 3-way merge. This means that there are 3 input files for merging process, and those are: * Local file (from current repository) * Other file (from repository being merged) * Base file (last version of file before branches separated) For more information about 3-way, see [http://revctrl.org/ThreeWayMerge ThreeWayMerge] on the [http://revctrl.org/ Revctrl wiki]. Else, if we do not have a graphical MergeProgram installed, we will be dropped into a text editor, which will be visiting the file we need to ["Merge"]. Doing this by hand is '''highly''' error-prone and tedious. It is best to exit the editor and use the {{{hg rollback}}} command to reverse the effect of the ["Pull"], then install a MergeProgram, and then try again. (~-Note: before Mercurial version 0.9, `hg update -m` should have been used in place of `hg merge` and `hg undo` should have been used instead of `hg rollback`-~). Now let's continue and finish on to TutorialConclusion. |
Santa Clarita-born Shandi Burns is really hooked on [[http://exonblast.com/members/victorinahunt1975/activity/284916/|Costa Blanca weather conditions March,]] gizmos, running. Lastly, she is fascinated by spending valuable time with her fine friends. |
Santa Clarita-born Shandi Burns is really hooked on Costa Blanca weather conditions March, gizmos, running. Lastly, she is fascinated by spending valuable time with her fine friends.