LibGit2Sharp как разрешить конфликт?

Используя libgit2sharp, я объединяю изменения от двух пользователей:

public void Merge(string branchName)
{
    using (Repository repo = new Repository(this._settings.Directory))
    {
        var branch = repo.Branches[branchName];
        MergeOptions opts = new MergeOptions() { FileConflictStrategy = CheckoutFileConflictStrategy.Merge };
        repo.Merge(branch, this._signature, opts);

        if (repo.Index.Conflicts.Count() > 0)
        {
             //TODO: resolve conflicts
        } 
    }
}

Даже если стратегия настроена на слияние, конфликты все равно возникают. Я не нашел способа разрешить конфликт. Объект Conflict не имеет метода Resolve.

Есть ли способ разрешить конфликт из кода, кроме удаления файла или его переименования? Есть ли функция автоматического разрешения?

Спасибо за любую помощь!


person Pavel Korsukov    schedule 19.11.2015    source источник
comment
Конфликт слияния либо должен быть разрешен вручную, либо вам потребуется перезаписать файл с помощью проверки слияния в стиле theirs или our. Это то же самое, что вам нужно было бы сделать через CLI с git merge xxxx   -  person SushiHangover    schedule 19.11.2015
comment
@RobertN Спасибо за повтор. Означает ли это, что я должен найти конфликтующий файл, прочитать все содержимое файла, каким-то образом найти конфликтную часть, заменить ее на свою или нашу, записать содержимое на диск и снова вызвать Merge?   -  person Pavel Korsukov    schedule 19.11.2015
comment
Кто-то еще написал ответ, но что касается вашего комментария, после того, как вы исправите / исправите файл (ы) в конфликте, вы должны будете подготовить и зафиксировать их, поскольку ваше локальное репо все еще находится в состоянии «слияния».   -  person SushiHangover    schedule 19.11.2015
comment
@RobertN Хорошо, я попробую. Благодарю вас!   -  person Pavel Korsukov    schedule 19.11.2015


Ответы (1)


LibGit2Sharp выполняет автоматическое слияние. Если вы видите конфликты, то файлы невозможно объединить. Примером несливаемого конфликта является ситуация, когда обе ветки изменяют одну и ту же область одного и того же файла.

В этом случае LibGit2Sharp запишет файл в рабочий каталог с разметкой вокруг конфликтующей области. Например, если какой-то файл foo.txt имеет конфликт, это может выглядеть так:

<<<<<<< HEAD
this is a change in HEAD
=======
this is a change in the other branch
>>>>>>> other branch

Чтобы разрешить конфликт, поместите содержимое, которое вы хотите принять, в рабочий каталог, а затем подготовьте его с помощью Repository.Index.Add("foo.txt").

person Edward Thomson    schedule 19.11.2015
comment
Спасибо за повтор. Я постараюсь показать конфликтующие части пользователю. Теперь понятно, как разрешить конфликт. Благодарю вас! - person Pavel Korsukov; 19.11.2015