我打算用我的插件替换git.exe
来自 Windows 路径的使用,这是一个 Visual Studio 2012 扩展,用于在当前文件的边缘显示 Git Diff。- https://github.com/laurentkempe/GitDiffMarginlibgit2sharp
GitDiffMargin
我想知道是否有一个等效的libgit2sharp
方法来启动外部 difftool 使用git difftool -y filename
?
我打算用我的插件替换git.exe
来自 Windows 路径的使用,这是一个 Visual Studio 2012 扩展,用于在当前文件的边缘显示 Git Diff。- https://github.com/laurentkempe/GitDiffMarginlibgit2sharp
GitDiffMargin
我想知道是否有一个等效的libgit2sharp
方法来启动外部 difftool 使用git difftool -y filename
?
我认为启动外部进程不应该是 LibGit2Sharp 的责任。LibGit2Sharp 的目标是提供一种轻松操作 git 存储库的方法。
这意味着您可以使用它来:
获取 workdir 中的文件与先前版本(在索引中)之间的差异。为此,您可以使用Repository.Diff.Compare(IEnumerable<string> paths, bool includeUntracked, ExplicitPathsOptions explicitPathsOptions)
重载,它返回一个TreeChanges
对象。从那里,您可以TreeEntryChanges
通过 treeChanges 的索引器获取一个对象,该对象对应于给定文件的更改(使用 .Patch 属性获取补丁的实际内容)。
使用Repository.Config
命名空间获取配置的差异工具(例如:repo.Config.Get<string>("diff.tool").Value
,尽管您还应该检查Get()
方法返回的值是否为空,以防用户没有配置差异工具)。这样,您可以自己启动差异工具。
其他资源 (v0.11.0):
注意:似乎在某些时候,您需要知道一行是否已更改。我认为现在没有简单的方法可以做到这一点(除了手动解析补丁内容)。但是,在 LibGit2Sharp问题跟踪器上打开一个问题可能会引发一些围绕该问题的讨论(请随意权衡您希望使用哪种 API!)。
编辑:在启动外部差异工具之前,您需要将索引中的文件内容复制到临时文件夹中。您可以通过执行以下操作在索引中查找文件的 blob:
但是...当您获取 blob 内容时,当前没有应用过滤器,因此由于 crlf 差异,比较可能会产生误报。目前在 libgit2 上打开了一个问题,以便提出一个允许应用过滤器的 API。