gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:17:29 26 4
gpt4 key购买 nike

我打算替换 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com