相当于 git difftool -y 和 libgit2sharp?

Lau*_*mpé 5 libgit2sharp

我计划用我的插件(一个 Visual Studio 2012 扩展)替换git.exefrom windows 路径的用法,以在当前文件的边缘显示 Git Diff。- https://github.com/laurentkempe/GitDiffMarginlibgit2sharpGitDiffMargin

我想知道是否有等效的方法libgit2sharp可以使用 来启动外部 difftool git difftool -y filename

yor*_*rah 2

我认为启动外部进程不应该是 LibGit2Sharp 的责任。LibGit2Sharp 的目标是提供一种轻松操作 git 存储库的方法。

这意味着您可以使用它来:

  • 获取工作目录中的文件与先前版本(索引中)的文件之间的差异。为此,您可以使用Repository.Diff.Compare(IEnumerable<string> paths, bool includeUntracked, ExplicitPathsOptions explicitPathsOptions)重载,它返回一个TreeChanges对象。从那里,您可以TreeEntryChanges通过treeChanges的索引器获取一个对象,该对象对应于给定文件的更改(使用.Patch属性获取补丁的实际内容)。

  • 使用Repository.Config命名空间获取配置的 diff 工具(例如:repo.Config.Get<string>("diff.tool").Value,尽管您还应该检查该方法返回的值是否Get()为 null,以防用户未配置 diff 工具)。这样,您就可以自己启动 diff 工具。

其他资源(v0.11.0):


注意:似乎在某些时候,您需要知道某行是否已更改。我认为现在没有一种简单的方法可以做到这一点(除了手动解析补丁内容之外)。然而,在 LibGit2Sharp问题跟踪器上提出问题可能会引发一些围绕该问题的讨论(请随意权衡您想要哪种 API 来执行此操作!)。


编辑:在启动外部比较工具之前,您需要将索引中的文件内容复制到临时文件夹中。您可以通过执行以下操作来查找索引中文件的 blob:

  • var indexEntry = repo.Index[文件名];
  • var blob = repo.Lookup(indexEntry.Id);

但是...当您获取 blob 内容时,当前没有应用任何过滤器,因此由于 crlf 差异,比较可能会产生误报。目前,libgit2 上存在一个问题,旨在提出一个允许应用过滤器的 API。