相当于git difftool -y和libgit2sharp?

时间:2013-05-11 14:19:32

标签: libgit2sharp

我打算用git.exe替换libgit2sharp的{​​{1}}用于我的插件GitDiffMargin,Visual Studio 2012扩展程序在当前文件的边缘显示Git Diff 。 - https://github.com/laurentkempe/GitDiffMargin

我想知道libgit2sharp中是否有等价物使用git difftool -y filename启动外部差异工具?

1 个答案:

答案 0 :(得分:2)

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

这意味着你可以用它来:

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

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

其他资源(v0.11.0):


注意:似乎在某些时候,您需要知道某条线是否已更改。我认为现在没有一种简单的方法可以做到(除了手动解析补丁内容)。但是,在LibGit2Sharp issue tracker上打开一个问题可能引发一些讨论(可以随意权衡你想要做什么样的API!)。


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

  • var indexEntry = repo.Index [fileName];
  • var blob = repo.Lookup(indexEntry.Id);

但是......当你获得blob内容时,当前没有应用过滤器,因此比较可能会因crlf差异而产生误报。 目前在libgit2上打开了issue,以便提出允许应用过滤器的API。