Libgit2sharp冲突获取他们的/我们的/基本文件内容

时间:2015-10-07 09:11:24

标签: libgit2sharp

我使用Libgit2sharp并且我想解决冲突。 在“冲突”类中,我有3个IndexEntry属性(Ancestor,Ours,他们的) 它们中的每一个都具有指向同一文件的属性“Path”。

我想隐藏TortoiseGitMerge工具,我想生成base / ours / theirs / files ......

我该怎么做?

提前致谢!

1 个答案:

答案 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);
}