LibGit2Sharp是否具有等效命令:
git diff-tree --patch-with-raw --cc <commit>
我可以看到哪些文件合并了或没有更改
答案 0 :(得分:3)
截至2014-05-27,libgit2
并未提供,我很害怕。
https://github.com/libgit2/libgit2/pull/1965具有基本逻辑,用于确定在合并期间哪些文件从原始父项更改(即,为解决合并冲突而进行的更改),但它不完整,可能需要重新设计。实际上,为合并生成一个带有差异的补丁更进一步。
答案 1 :(得分:0)
到目前为止,仍然没有内置支持。但是您可以通过获取合并的提交与其父提交之间的差异来手动实现。
以下函数返回两次提交之间的更改。您必须通过提交的树。
private IEnumerable<TreeEntryChanges> GetDiffOfTrees(LibGit2Sharp.Repository repo, Tree oldTree,Tree newTree, CompareOptions compareOptions)
{
foreach (TreeEntryChanges change in repo.Diff.Compare<TreeChanges>(oldTree, newTree, compareOptions))
{
var changeStatus = change.Status;
if (changeStatus == ChangeKind.Unmodified)
{
continue;
}
yield return change;
}
}
然后下面的函数计算提交与每个父对象之间的差异,并返回两个差异之间共有的那些更改。这些更改是在合并过程中引入的。
private IEnumerable<TreeEntryChanges> GetDiffOfMergedTrees(Repository gitRepo, IEnumerable<LibGit2Sharp.Commit> parents, Tree tree, CompareOptions compareOptions)
{
var firstParent = parents.ElementAt(0);
var secondParent = parents.ElementAt(1);
var firstChanges = GetDiffOfTrees(gitRepo, firstParent.Tree, tree, compareOptions);
var secondChanges = GetDiffOfTrees(gitRepo, secondParent.Tree, tree, compareOptions);
var changes = firstChanges.Where(c1 => secondChanges.Any(c2 => c2.Oid == c1.Oid));
return changes;
}
因此,要获取差异,只需调用 GetDiffOfMergedTrees 方法。