libgit2:与冲突合并

时间:2017-04-12 20:24:03

标签: libgit2

我正在使用libgit2实现合并,而我在处理冲突时遇到问题(对文件中相同行的更改) - 合并只是中止,没有写入索引或写入工作区。可解决的冲突(对不同行的更改)工作正常。

它以Cat退出,显然表明工作树和/或索引不干净,但我在调用GIT_ECONFLICT之前使用git status进行了检查并且它是干净的。

我正在使用默认合并选项,结帐选项设置为git_merge()。我尝试使用GIT_CHECKOUT_SAFE | GIT_CHECKOUT_ALLOW_CONFLICTS代替FORCE,但它没有帮助。我还需要做什么才能记录冲突?

代码在这里(在Swift中): https://github.com/Uncommon/Xit/blob/ff1bf6312bb1250b1db432035947a282a2cdd362/Xit/XTRepository%2BMergePushPull.swift#L154

1 个答案:

答案 0 :(得分:0)

原来问题是,由于我的单元测试刚刚使用命令行工具完成了git commit,因此libgit2的索引内存中的副本已经过时了,所以使用它索引的旧版本认为存在冲突。在调用git_index_read()之前用git_merge()重新加载索引解决了这个问题。

这实际上是libgit2中的一个错误; git_merge应该重新加载索引本身:https://github.com/libgit2/libgit2/issues/4203