2017-04-12 4 views
0

libgit2를 사용하여 병합을 구현하는 중입니다. 충돌 (파일의 동일한 행이 변경됨)을 처리하는 데 문제가 있습니다. 병합이 중단되고 아무 것도 기록되지 않습니다. 색인 또는 작업 공간. 해결 가능한 충돌 (다른 행에 대한 변경)이 잘 작동합니다.libgit2 : 충돌로 병합

그것은 분명히 worktree 및/또는 인덱스가 깨끗하지 있음을 나타냅니다, GIT_ECONFLICT으로 종료하지만, 난 그냥 git_merge()를 호출하기 전에 git status으로 확인하고 깨끗합니다.

기본 병합 옵션을 사용하고 체크 아웃 옵션을 GIT_CHECKOUT_SAFE | GIT_CHECKOUT_ALLOW_CONFLICTS으로 설정하고 있습니다. SAFE 대신 FORCE을 사용했지만 사용하지 않았습니다. 갈등이 기록 될 수 있도록 내가해야 할 일이 무엇이 있습니까?

코드 (SWIFT에) 여기에 있습니다 : https://github.com/Uncommon/Xit/blob/ff1bf6312bb1250b1db432035947a282a2cdd362/Xit/XTRepository%2BMergePushPull.swift#L154

답변

0

그것은 인덱스의 복사본이었다에 메모리 libgit2 년대, 문제는 내 단위 테스트는 단지 명령 행 도구를 사용하여 git commit 일을했기 때문에,이었다 밝혀졌다 시대에 뒤떨어지기 때문에 인덱스의 오래된 사본을 사용하여 충돌이 있다고 생각했습니다. git_merge()으로 전화하기 전에 git_index_read()으로 색인을 다시로드하면 문제가 해결됩니다.

이것은 실제로 libgit2의 버그입니다. git_merge은 색인 자체를 다시로드해야합니다. https://github.com/libgit2/libgit2/issues/4203