LibGit2Sharp是否具有该命令的等效项:
git diff-tree --patch-with-raw --cc <commit>
我可以看到哪些文件合并了或没有更改
截至2014-05-27,libgit2
没有提供,我担心。
https://github.com/libgit2/libgit2/pull/1965具有基本逻辑,用于确定合并期间哪些文件从原始父项更改(即,为解决合并冲突而进行的更改),但它不完整,可能需要重新设计。实际上,生成具有用于合并的差异的补丁进一步关闭。
截至目前,仍然没有内置支持。但您可以通过获取合并提交与其父项之间的差异来手动实现它。
以下函数返回两次提交之间的更改。你必须传递提交的树。
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方法即可。