例如,.gitattributes
的{{1}}文件包含行lg2s
。代码的输出
*.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
libgit2/#508,但PR Add .gitattributes support
libgit2/#516是否已合并?
现在支持多少种语言?
我们可以指定没有Add APIs for git attributes
文件的规则吗?
答案 0 :(得分:6)
这实际上是差异驱动器和差异的自定义函数上下文规则的问题,而不是属性之一。
这些文件确实具有diff=csharp
属性;问题是该属性对libgit2
没有任何意义。
当git
和libgit2
生成差异时,它们使用正则表达式来查找发生差异块的函数的名称。如果没有正则表达式可用于查找不以空格开头的第一行,它们也有一个回退规则。
git
包含table of built in diff drivers,其中包含csharp
驱动程序的定义。
libgit2
不包含该表(如in the PR that merged diff driver support所述),因此没有关于diff=csharp
使用什么模式的内置概念。
解决这个问题的替代方法是:
.git/config
文件(或您的$HOME/.gitconfig
)中输入一个条目,该文件使用要搜索的模式实现diff.csharp.xfuncname
,或libgit2
。导入的问题(以及我没有接受它的原因)是它将涉及获得代码原始作者的许可以重新许可它以便在libgit2
中使用。)如果你决定启动一个Pull Request,并且你得到了CSharp xfuncname模式的作者同意重新许可libgit2
的代码,请告诉我,我很乐意就实际实施进行合作!