gpt4 book ai didi

libgit2 - 如何在 gitattributes 中应用语言的差异规则

转载 作者:行者123 更新时间:2023-12-02 08:36:16 25 4
gpt4 key购买 nike

例如,lg2s.gitattributes 文件有 *.cs diff=csharp 行。代码的输出

using (var repo = new Repository(@"path\to\lg2s"))
{
var tree1 = repo.Lookup<Commit>("a845db9").Tree;
var tree2 = repo.Lookup<Commit>("d677741").Tree;
var patches = repo.Diff.Compare<Patch>(tree1, tree2);
foreach (var patch in patches)
{
Console.WriteLine(patch.Patch);
}
}

是(不久)

diff --git a/LibGit2Sharp/RepositoryStatus.cs b/LibGit2Sharp/RepositoryStatus.cs
@@ -59,8 +59,8 @@ namespace LibGit2Sharp

但是 git bash 的输出是(很快)

diff --git a/LibGit2Sharp/RepositoryStatus.cs b/LibGit2Sharp/RepositoryStatus.cs
@@ -59,8 +59,8 @@ internal RepositoryStatus(Repository repo, StatusOptions optio

第二行不一样。

看起来有深入的讨论添加.gitattributes 支持 libgit2/#508 ,但是 PR 为 git 属性添加 API libgit2/#516合并还是不合并?

现在支持多少种语言?

我们可以在没有 gitattributes 文件的情况下指定规则吗?

最佳答案

这实际上是差异驱动程序和差异的自定义函数上下文规则的问题,而不是属性之一。

那些文件确实有 diff=csharp 属性;问题是该属性对 libgit2 没有任何意义。

gitlibgit2 生成差异时,它们使用正则表达式来查找出现差异 block 的函数的名称。如果没有正则表达式可用于查找不是以空格开头的第一行,它们也有回退规则。

git 包含一个 table of built in diff drivers其中包括 csharp 驱动程序的定义。

libgit2 不包含该表(如讨论的 in the PR that merged diff driver support ),因此没有关于 diff=csharp 使用什么模式的内置概念。

解决这个问题的替代方案是:

  1. 在您的 .git/config 文件(或您的 $HOME/.gitconfig)中创建一个实现 diff.csharp.xfuncname 的条目具有搜索模式,或
  2. 向导入驱动程序定义的 libgit2 发起合并请求。导入的问题(也是我没有接受它的原因)是它将涉及从代码的原始作者那里获得许可以重新许可它以在 libgit2 中使用。

如果您决定发起合并请求,并且让 CSharp xfuncname 模式的作者同意重新许可 libgit2 的代码,请告诉我,我很乐意就实际执行!

关于libgit2 - 如何在 gitattributes 中应用语言的差异规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21096188/

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