0

我正在研究一个需要合并的 Ruby 脚本。我想做的是,给定目标引用和合并尝试合并它们,如果存在合并冲突,则将控制权交还给用户以解决它们,基本上完全一样git merge,因此用户可以处理冲突,然后调用git my-merge --continue并从我们离开的地方继续。

我到目前为止是这样的:

merge_index = @repo.merge_commits(@commit, target_tip, options)
unless merge_index.conflicts?
options = {
    :committer => @commit.committer,
    :author => @commit.author,
    :parents => [target_tip, @commit],
    :message => merge_message,
    :update_ref => @target.canonical_name,
    :tree => merge_index.write_tree(@repo)
}

commit = Rugged::Commit.create(@repo, options)
else
    # Here's where my unwritten code goes 
end

问题来了:鉴于merge_index我有一些冲突,我如何让我的工作目录进入它所代表的状态,以便我可以返回到 shell 并让用户解决它们?似乎我无法将其写出(它会抱怨它无法写出未完全合并的索引),并且我看不到将当前索引设置为它的明显方法。

4

1 回答 1

0

合并索引是合并的结果。如果您希望它成为存储库的状态,则需要将该索引写入存储库的索引,例如

repo.index = merge_index
merge_index.write()

然后,您可以像往常一样使用结帐,这将在工作树中的文件上创建冲突标记。

libgit2 本身已经git_merge()为你做这件事;如果您不想在代码中执行这些步骤,您可能想考虑通过坚固耐用的方式使其可用。

于 2015-03-05T15:22:48.810 回答