我使用Libgit2sharp并且我想解决冲突。 在“冲突”类中,我有3个IndexEntry属性(Ancestor,Ours,他们的) 它们中的每一个都具有指向同一文件的属性“Path”。
我想隐藏TortoiseGitMerge工具,我想生成base / ours / theirs / files ......
我该怎么做?
提前致谢!
答案 0 :(得分:3)
您可以从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);
}