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