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