【问题标题】:Rugged (libgit2) stage for index用于索引的坚固 (libgit2) 阶段
【发布时间】:2016-03-25 20:45:11
【问题描述】:

查看索引(在 master 和分支之间调用 merge_commits 之后),我看到同一个文件有 3 个结果,

{:path=>"file.txt", :oid=>"c6fdbacd7400805042668f4ccf70fc1ebbdac361", :dev=>0, :ino=>0, :mode=>33188, :gid=>0, :uid=>0, :file_size=>0, :valid=>false, :stage=>1, :ctime=>1969-12-31 19:00:00 -0500, :mtime=>1969-12-31 19:00:00 -0500}
{:path=>"file.txt", :oid=>"0838a4be16d19278e1e549614ffd2b6759549185", :dev=>0, :ino=>0, :mode=>33188, :gid=>0, :uid=>0, :file_size=>0, :valid=>false, :stage=>2, :ctime=>1969-12-31 19:00:00 -0500, :mtime=>1969-12-31 19:00:00 -0500}
{:path=>"file.txt", :oid=>"4bd2639f786bef1000dad7d59c6779a4e99fb27c", :dev=>0, :ino=>0, :mode=>33188, :gid=>0, :uid=>0, :file_size=>0, :valid=>false, :stage=>3, :ctime=>1969-12-31 19:00:00 -0500, :mtime=>1969-12-31 19:00:00 -0500}

通过查看每一个的内容,我的理解是第 3 阶段是最“最新/高级”的变化,但有人可以解释这些阶段和编号背后的概念吗?并且缺少第 0 阶段,因为此文件中有未提交的更改?

【问题讨论】:

    标签: git libgit2 rugged


    【解决方案1】:

    我不熟悉 libgit2,但 git 索引文件中的非零阶段是用来处理合并冲突的。

    在解决冲突之前,单个路径名最多有三个条目,如the gitrevisions documentation 中所述:

    一个冒号(可选地后跟一个阶段号(0 到 3)和一个冒号,后跟一个路径,在给定路径的索引中命名一个 blob 对象。缺少的阶段编号(及其后面的冒号)命名阶段 0 条目。在合并期间,阶段 1 是共同祖先,阶段 2 是目标分支的版本(通常是当前分支),阶段 3 是正在合并的分支的版本。

    如果合并冲突是因为删除(即文件存在于共同祖先中,但在一个分支中丢失并在另一个分支中修改),则将只有阶段 2 或 3 中的一个;如果是因为创建(文件在共同祖先中不存在,但在两个分支中创建),则不会有阶段 1 条目。 (我不确定我是否在这里涵盖了所有少于 3 个条目的情况。)

    在完成并提交合并之前,您必须将非零阶段条目替换为单个阶段 0 条目。

    【讨论】:

      【解决方案2】:

      当你进行合并时,git 需要基础版本的每个提示的更改。该索引记录了base version id和每个tips的version oid,分别为1(base)2(“ours”),3(“theirs”)。记录内容 id 允许您根据需要在各种选项下重新运行差异(例如,获取 3-diff 冲突报告或忽略空白更改)。阶段 0 用于已解决的内容,即没有进行中合并的内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多