【问题标题】:Fossil, is it possible to have 2 leaves in single branch?化石,一个分支可以有2片叶子吗?
【发布时间】:2014-04-04 00:59:05
【问题描述】:

我和我的朋友需要并行开发一个项目。这个怎么做?

我在每片叶子上创建了两个分支。尝试合并叶子,但编辑文件出现冲突错误。合并它们的方法是什么?

我想知道是否可以在一个分支中拥有 2 片叶子?如果是这样,那么除了默认叶子之外,如何创建一个新叶子。

【问题讨论】:

    标签: version-control dvcs fossil


    【解决方案1】:

    每个分支在任何时候都有一个叶子。从每个分支的角度来看,这些代表了存储库的最新状态。正如您的帖子所提到的,分支用于在存储库中提供并行开发。它们也是自动创建的(在这种情况下称为“fork”),以防止当每个提交具有相同的直接祖先时两次提交到同一个分支......允许这就像在同一个分支上有多个叶子一样。

    要创建一个新的开发分支,需要打开一个化石存储库并执行如下命令:

    fossil branch new some_feature trunk
    

    完整示例

    为了举例,我快速创建了一个新的存储库并将一个文件添加到主干(最初唯一的分支),file.txt。我的示例文件的初始内容是:

    here
    is
    a
    file
    

    在提交带有注释“create baseline”的添加文件后,我根据trunk 分支的当前状态(又名叶子)为名为“some_feature”的新功能创建了一个开发分支。 ..

    fossil branch new some_feature trunk
    

    现在有两个分支,trunksome_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”。

    作为参考,这里是由化石为这个例子提供的事件历史图:

    【讨论】:

    • 如何去除合并冲突注解?是否需要手动完成?如果是这样,当 2 个开发人员工作时,将有很多合并冲突注释需要手动解决。
    • 合并非常常见,但并不总是意味着它涉及处理冲突注释。每当两个开发分支必须走到一起时,你就合并了。 “合并”操作告诉化石尽可能地组合目标和指定分支的状态。只有当对文件的相同部分进行修改时,才会出现需要您处理注释的显式冲突。否则,化石只是将所有变化放在一起。这并不意味着你的代码可以工作......你总是需要在提交之前验证,注释与否。
    • 而且,是的,您必须手动删除注释,但这很容易......它们只是文本。更具挑战性的部分(实际上并不总是那么具有挑战性)是让冲突的代码在您修改后按照各方的预期工作。最好的办法是确保一个文件架构允许团队成员在他们各自的部分上工作而不接触相同的文件……至少不是相同文件的相同部分。但是,无论如何,当您合并时,您必须进行一些测试以确保在提交之前一切都按预期工作。
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多