Differences between revisions 1 and 7 (spanning 6 versions)
Revision 1 as of 2006-09-15 06:26:35
Size: 3133
Editor: BenLuo
Comment:
Revision 7 as of 2008-11-26 00:22:12
Size: 3119
Editor: rolandsun
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
#language zh
Line 3: Line 5:
In ChineseTutorialExport, 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. ChineseTutorialExport 一节, 我们学会了如何与其他人共享变更. 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.
Line 5: Line 7:
First, we must create something to merge. Let's ["Clone"] the {{{my-hello}}} repository again: 首先, 我们必须创建合并的目标. 我们再次 ["Clone"] {{{my-hello}}}的仓库:
Line 12: Line 14:
We are going to give {{{hello.c}}} a description in its comment section. 我们给 {{{hello.c}}} 的注释段加一段描述.
Line 19: Line 21:
Let's change the second line from this: 我们将第二行:
Line 25: Line 27:
to this: 改为:
Line 31: Line 33:
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: 我们存档并退出编辑器, 然后 ["Commit"] 我们的修改. 这次, 我们在{{{commit}}}命令中使用{{{-m}}} 选项来节省时间, 以免我们又要进入编辑器:
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:仓库]. 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? 这时, 我们已经对 {{{my-hello-new-output}}} [:Repository:仓库]中的 {{{hello.c}}} 作了一个更改 , 同时对 {{{my-hello-desc}}} [:Repository:仓库] 中的 {{{hello.c}}} 作了另一个更改. 我们怎样 ''merge'' 这两个分叉开发主线? 我们从一个仓库拖进另外一个仓库的时候会出现问题吗?
Line 39: Line 41:
This works just fine. While still in {{{my-hello-desc}}}, let's ["Pull"] the changes from {{{my-hello-new-output}}} and see what happens: 这完全没有问题. 现在仍然在 {{{my-hello-desc}}}中, 我们从 {{{my-hello-new-output}}}中 ["Pull"] 并且看看发生了什么:
Line 76: Line 78:
----
CategoryChinese

教程 - 合并改变

ChineseTutorialExport 一节, 我们学会了如何与其他人共享变更. 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.

首先, 我们必须创建合并的目标. 我们再次 ["Clone"] my-hello的仓库:

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

我们给 hello.c 的注释段加一段描述.

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

我们将第二行:

 * hello.c

改为:

 * hello.c - hello, world

我们存档并退出编辑器, 然后 ["Commit"] 我们的修改. 这次, 我们在commit命令中使用-m 选项来节省时间, 以免我们又要进入编辑器:

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

这时, 我们已经对 my-hello-new-output [:Repository:仓库]中的 hello.c 作了一个更改 , 同时对 my-hello-desc [:Repository:仓库] 中的 hello.c 作了另一个更改. 我们怎样 merge 这两个分叉开发主线? 我们从一个仓库拖进另外一个仓库的时候会出现问题吗?

这完全没有问题. 现在仍然在 my-hello-desc中, 我们从 my-hello-new-output中 ["Pull"] 并且看看发生了什么:

$ 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 'hg merge' to merge across branches or 'hg update -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 merge
merging hello.c

That's all there is to it! ["Mercurial"] was able to handle the merge automatically for you, by calling under the covers the hgmerge script (or whatever is your MergeProgram). Depending on your environment, the hgmerge may call a graphical merge resolver tool. 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.

(Note: before Mercurial version 0.9, hg update -m should have been used in place of hg merge).

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 ChineseTutorialConflict.


CategoryChinese

ChineseTutorialMerge (last edited 2012-09-05 06:18:40 by 219)