libgit2sharp - 等同于 git difftool -y 和 libgit2sharp?

标签 libgit2sharp

我打算替换 git.exe 的用法从 Windows 路径 libgit2sharp对于我的插件 GitDiffMargin , 一个 Visual Studio 2012 扩展,用于在当前文件的边距上显示 Git Diff。 - https://github.com/laurentkempe/GitDiffMargin

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

最佳答案

我认为启动外部进程不应该是 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() 方法返回的值是否为空,以防用户未配置差异工具)。这样,您就可以自己启动 diff 工具。

  • 其他资源 (v0.11.0):
  • 工作目录与索引的差异 tests
  • example展示如何使用 TreeChanges对象
  • Configuration fixture , 不言自明


  • 备注 :似乎在某个时候,您需要知道一行是否已更改。我认为现在没有一种简单的方法可以做到这一点(除了手动解析补丁内容)。但是,在 LibGit2Sharp 上打开一个问题 issue tracker可能会引发一些讨论(请随意权衡您希望使用哪种 API!)。

    编辑 : 在启动外部差异工具之前,您需要将索引中的文件内容复制到临时文件夹中。您可以通过执行以下操作在索引中查找文件的 blob:
  • var indexEntry = repo.Index[fileName];
  • var blob = repo.Lookup(indexEntry.Id);

  • 但是……当您获取 blob 内容时,当前没有应用过滤器,因此由于 crlf 差异,比较可能会产生误报。
    当前有一个 issue在 libgit2 上打开以提出一个允许应用过滤器的 API。

    关于libgit2sharp - 等同于 git difftool -y 和 libgit2sharp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16498042/

    相关文章:

    c# - 如何使用 libgit2 连接到 GitHub 存储库?

    c# - libgit2sharp 创建拉取请求

    .net - 如何使用 LibGit2Sharp 获取当前/事件分支?

    c# - LibGit2Sharp 如何解决冲突?

    c# - LibGit2Sharp 获取自 {Hash} 以来的所有提交

    libgit2sharp - 如何判断捕获到的LibGit2SharpException是HTTP 401错误?

    c# - 什么会导致 git pull(通过 libgit2sharp)出现 401 错误?

    c# - 如何检查目录是否是 C# 中的 git 存储库

    libgit2sharp - 如何查明获取的远程引用是否有更新版本的文件?

    libgit2 - 我们如何在 Visual Studio 2010 Windows 应用程序中集成 Libgit2 库