2017-04-12 3 views
0

Ich arbeite an der Implementierung von Merge mit libgit2, und ich habe Probleme, es mit Konflikten (Änderungen an der gleichen Zeile in einer Datei) zu behandeln - die Zusammenführung bricht einfach ab, mit nichts geschrieben der Index oder der Arbeitsbereich. Auflösbare Konflikte (Änderungen an verschiedenen Zeilen) funktionieren gut.libgit2: Verschmelzen mit Konflikten

Es tritt mit GIT_ECONFLICT, die offenbar zeigt, dass die worktree und/oder Index nicht sauber sind, aber ich habe mit git status kurz vor git_merge() Aufruf und es ist sauber.

Ich verwende Standard-Merge-Optionen und Checkout-Optionen auf GIT_CHECKOUT_SAFE | GIT_CHECKOUT_ALLOW_CONFLICTS festgelegt. Ich versuchte mit FORCE anstelle von SAFE, aber es half nicht. Was muss ich noch tun, damit die Konflikte aufgezeichnet werden?

-Code ist hier (in Swift): https://github.com/Uncommon/Xit/blob/ff1bf6312bb1250b1db432035947a282a2cdd362/Xit/XTRepository%2BMergePushPull.swift#L154

Antwort

0

Es stellte sich das Problem, dass war aus, da mein Unit-Test ein git commit mit dem Kommandozeilen-Tool gerade getan hatte, Kopie des Index libgit2 das in-memory war veraltet, also dachte ich, dass es bei der alten Kopie des Indexes einen Konflikt gab. Ein erneutes Laden des Indexes mit git_index_read() vor dem Aufruf git_merge() löste das Problem.

Dies ist eigentlich ein Fehler in libgit2; git_merge sollte den Index selbst neu laden: https://github.com/libgit2/libgit2/issues/4203