libgit2:合并冲突
libgit2: Merge with conflicts
我正在使用 libgit2 实现合并,但我无法让它处理冲突(对文件中同一行的更改)- 合并只是中止,没有任何内容写入索引或到工作区。可解决的冲突(更改为不同的行)工作正常。
它以 GIT_ECONFLICT
退出,这显然表明工作树 and/or 索引不干净,但我在调用 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
原来的问题是,由于我的单元测试刚刚使用命令行工具完成了 git commit
,libgit2 的索引内存副本已过时,因此使用旧副本它认为存在冲突的索引。在调用 git_merge()
之前用 git_index_read()
重新加载索引解决了问题。
这其实是libgit2的一个bug; git_merge
应该重新加载索引本身:https://github.com/libgit2/libgit2/issues/4203
我正在使用 libgit2 实现合并,但我无法让它处理冲突(对文件中同一行的更改)- 合并只是中止,没有任何内容写入索引或到工作区。可解决的冲突(更改为不同的行)工作正常。
它以 GIT_ECONFLICT
退出,这显然表明工作树 and/or 索引不干净,但我在调用 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
原来的问题是,由于我的单元测试刚刚使用命令行工具完成了 git commit
,libgit2 的索引内存副本已过时,因此使用旧副本它认为存在冲突的索引。在调用 git_merge()
之前用 git_index_read()
重新加载索引解决了问题。
这其实是libgit2的一个bug; git_merge
应该重新加载索引本身:https://github.com/libgit2/libgit2/issues/4203