【发布时间】:2014-04-04 00:59:05
【问题描述】:
我和我的朋友需要并行开发一个项目。这个怎么做?
我在每片叶子上创建了两个分支。尝试合并叶子,但编辑文件出现冲突错误。合并它们的方法是什么?
我想知道是否可以在一个分支中拥有 2 片叶子?如果是这样,那么除了默认叶子之外,如何创建一个新叶子。
【问题讨论】:
标签: version-control dvcs fossil
我和我的朋友需要并行开发一个项目。这个怎么做?
我在每片叶子上创建了两个分支。尝试合并叶子,但编辑文件出现冲突错误。合并它们的方法是什么?
我想知道是否可以在一个分支中拥有 2 片叶子?如果是这样,那么除了默认叶子之外,如何创建一个新叶子。
【问题讨论】:
标签: version-control dvcs fossil
每个分支在任何时候都有一个叶子。从每个分支的角度来看,这些代表了存储库的最新状态。正如您的帖子所提到的,分支用于在存储库中提供并行开发。它们也是自动创建的(在这种情况下称为“fork”),以防止当每个提交具有相同的直接祖先时两次提交到同一个分支......允许这就像在同一个分支上有多个叶子一样。
要创建一个新的开发分支,需要打开一个化石存储库并执行如下命令:
fossil branch new some_feature trunk
为了举例,我快速创建了一个新的存储库并将一个文件添加到主干(最初唯一的分支),file.txt。我的示例文件的初始内容是:
here
is
a
file
在提交带有注释“create baseline”的添加文件后,我根据trunk 分支的当前状态(又名叶子)为名为“some_feature”的新功能创建了一个开发分支。 ..
fossil branch new some_feature trunk
现在有两个分支,trunk 和 some_feature。创建分支不会改变我的工作分支,所以我还在trunk。然后我将基线文件编辑为:
here
is
a
file
folder
...在末尾添加“文件夹”。然后我将更改提交给trunk,并附上评论“modification on first branch... trunk。然后我将开发切换到some_feature 分支...
fossil co some_feature
在第二个分支中,我还编辑了基线文件的最后一行:
here
is
a
file
reader
...在末尾添加“阅读器”。然后我将更改提交给some_feature,并附上评论“modification on second branch... some_feature”。
要合并开发,您选择了要将更改合并到的分支。在这种情况下,我会将功能分支更改合并到主干中。为此,您必须首先检查合并的目标分支......在我的情况下,trunk。
fossil co trunk
然后,我合并来自另一个分支的特定提交的更改。就我而言,我将使用该分支的叶子:
fossil merge some_feature
MERGE file.txt
***** 1 merge conflicts in file.txt
WARNING: 1 merge conflicts
"fossil undo" is available to undo changes to the working checkout.
这让我的工作目录中现在有四个文件,而不是一个。没有新的提交/签入实际上已正确返回到存储库。这四个文件是:file.txt、file.txt-baseline、file.txt-merge 和 file.txt-original。 “file.txt-baseline”是合并分支的最近共同祖先中存在的文件。 “file.txt-original”是目标分支中存在的文件,在我的例子中,trunk,就在合并之前。 “file.txt-merge”是您要合并的分支中存在的文件,在我的情况下,some_feature。最后,“file.txt”包含基线文件的内容,其中包含与原始文件和合并文件的冲突更改的注释,因此您可以决定如何处理不同的内容。
就我而言,生成的冲突文件“file.txt”如下所示:
here
is
a
file
<<<<<<< BEGIN MERGE CONFLICT: local copy shown first <<<<<<<<<<<<<<<
folder
======= COMMON ANCESTOR content follows ============================
======= MERGED IN content follows ==================================
reader
>>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
在从文件中删除合并冲突注释之前,fossil 不会让你提交(或者它至少会警告它)。否则,您将使用消息进行提交,例如“merged some_feature into trunk”。
作为参考,这里是由化石为这个例子提供的事件历史图:
【讨论】: