2017-04-12 136 views
0

我正在使用libgit2實現合併,並且遇到問題時無法處理衝突(對文件中同一行的更改) - 合併僅中止,沒有寫入任何內容索引或工作區。可解決的衝突(對不同行的更改)工作正常。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

回答

0

原來的問題是,因爲我的單元測試都使用命令行工具只是做了git commit,libgit2的內存中索引的副本是過時了,所以使用該索引的舊副本它認爲存在衝突。在致電git_merge()之前用git_index_read()重新加載索引解決了該問題。

這實際上是libgit2中的一個bug; git_merge應重新加載索引本身:https://github.com/libgit2/libgit2/issues/4203