2017-04-12 5 views
0

でマージし、私は紛争(ファイルの同じ行への変更)に対処するためにそれを得るトラブルを抱えています索引またはワークスペースに移動します。解決可能な競合(異なる行への変更)がうまくいきます。libgit2: - に書かれた何も、マージがちょうど中止し、私はlibgit2を使用して、マージの実装に取り​​組んでいる競合

GIT_ECONFLICTで終了します。ワークツリーやインデックスがきれいではないことを示していますが、git_merge()を呼び出す直前にgit statusとチェックしています。

私は、既定のマージオプション、およびGIT_CHECKOUT_SAFE | GIT_CHECKOUT_ALLOW_CONFLICTSに設定し、チェックアウトオプションを使用しています。 SAFEの代わりにFORCEを使ってみましたが、役に立たなかったです。紛争が記録されるように他に何をする必要がありますか?

コードは(スウィフトで)ここにある: https://github.com/Uncommon/Xit/blob/ff1bf6312bb1250b1db432035947a282a2cdd362/Xit/XTRepository%2BMergePushPull.swift#L154

答えて

0

それは問題がインデックスのメモリ内コピーだったlibgit2年代、私のユニットテストは、ちょうどコマンドラインツールを使用してgit commitを行っていたことから、ということであったが、古いので、インデックスの古いコピーを使用して、それは紛争があると思った。 git_merge()を呼び出す前にインデックスをgit_index_read()にリロードして問題を解決しました。

これは実際にlibgit2のバグです。 https://github.com/libgit2/libgit2/issues/4203

git_mergeは、インデックス自体をリロードする必要があります
関連する問題