Вы можете получить ConflictCollection
от Index
:
var conflicts = repository.Index.Conflicts;
Тогда получите конфликт для конкретного файла:
var conflict = conflicts["Foo.cs"];
Тогда вы можете получить IndexEntry
для каждой стороны конфликта:
var ancestor = conflict.Ancestor;
var ours = conflict.Ours;
var theirs = conflict.Theirs;
С указателем, лет и может получить объекты:
var ancestorBlob = (ancestor != null) ? repository.Lookup(ancestor.Id) : null;
var ourBlob = (ours != null) ? repository.Lookup(ours.Id) : null;
var theirBlob = (theirs != null) ? repository.Lookup(theirs.Id) : null;
И вы можете получить поток для содержимого каждой стороны:
var ancestorStream = (ancestor != null) ? ancestorBlob.GetContentStream(new FilteringOptions(ancestor.Name));
var ourStream = (ours != null) ? ourBlob.GetContentStream(new FilteringOptions(ours.Name));
var theirStream = (theirs != null) ? theirBlob.GetContentStream(new FilteringOptions(theirs.Name));
Затем вы можете написать каждый файл - помните, что конфликт может иметь три разные пути, если файл был переименован с каждой стороны, и вы должны проверить Conflict.Name
для каждого. Например, для записи одной из сторон на диск:
using (var ancestorOutputStream = File.Create(ancestor.Name + ".orig"))
{
ancestorStream.CopyTo(ancestorOutputStream);
}
Большое спасибо! Решена моя проблема! – Sergiu
Единственное различие заключалось в том, что я использовал foreach для обработки конфликтов, а затем для каждого конфликта я получил имя файла из Ours.Path конфликта, потому что этот путь одинаковый во всех свойствах (Ours, их, Base) – Sergiu
@ Sergiu Это не гарантировано - если один из файлов был переименован, пути могут быть разными. –