我正在开发一个需要进行合并的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并让用户解决它们?我似乎无法写出来(它会抱怨它无法写出一个未完全合并的索引)而且我没有看到一种明显的方法来设置我当前的索引。
答案 0 :(得分:0)
合并索引是合并的结果。如果您希望将其作为存储库的状态,则需要将该索引编写为存储库的索引,例如
repo.index = merge_index
merge_index.write()
然后您可以像往常一样使用checkout,这将在工作树中的文件上创建冲突标记。
libgit2本身有git_merge()
这样做是为了你;如果您不想执行代码中的步骤,可能需要考虑通过坚固的方式使其可用。