我正在使用libgit2实现合并,在处理冲突(对文件中同一行的更改)时遇到了困难--合并只是中止,没有写入索引或工作区。可解决的冲突(对不同行的更改)运行良好。
它与GIT_ECONFLICT一起存在,这显然表明工作树和/或索引不是干净的,但是我在调用git_merge()之前使用git status进行了检查,并且它是干净的。
我使用默认的合并选项,并将签出选项设置为GIT_CHECKOUT_SAFE | GIT_CHECKOUT_ALLOW_CONFLICTS。我尝试使用FORCE而不是SAFE,但这没有帮助。我还需要做什么才能记录冲突?
代码在这里(在Swift中):https://github.com/Uncommon/Xit/blob/ff1bf6312bb1250b1db432035947a282a2cdd362/Xit/XTRepository%2BMergePushPull.swift#L154
发布于 2017-04-13 14:48:54
结果问题是,由于我的单元测试刚刚使用命令行工具执行了一个git commit,所以libgit2 2的内存中索引副本已经过时,所以使用该索引的旧副本它认为存在冲突。在调用git_index_read()之前,用git_merge()重新加载索引解决了这个问题。
这实际上是libgit2中的一个错误;git_merge应该重新加载索引本身:https://github.com/libgit2/libgit2/issues/4203
https://stackoverflow.com/questions/43378998
复制相似问题