2

たとえば、 の.gitattributesファイルに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

2行目は同じではありません。

詳細な議論Add .gitattributes support libgit2/#508があるように見えますが、PR Add APIs for git attributes libgit2/#516はマージされていますか?

現在、サポートされている言語はいくつですか?

ファイルなしでルールを指定できgitattributesますか?

4

1 に答える 1

6

これは実際には、属性の問題ではなく、差分ドライバーと差分のカスタム関数コンテキスト ルールの問題です。

これらのファイルにはdiff=csharp属性があります。問題は、属性が にとって何の意味もないことlibgit2です。

gitとが差分を生成するとき、libgit2正規表現を使用して、差分ハンクが発生する関数の名前を見つけます。また、空白で始まらない最初の行を見つけるための正規表現が利用できない場合のフォールバック ルールもあります。

gitドライバーの定義を含む、組み込みの diff ドライバーの表が含まれていますcsharp

libgit2にはそのテーブルが含まれていないため ( diff ドライバーのサポートをマージした PR で説明されているように)、 に使用するパターンの概念が組み込まれていませんdiff=csharp

これを解決するための代替手段は次のいずれかです。

  1. 検索するパターンを実装する.git/configファイル (または)にエントリを作成するか、$HOME/.gitconfigdiff.csharp.xfuncname
  2. libgit2ドライバー定義をインポートするプル リクエストを開始します。インポートに関する問題 (および私がそれを引き受けなかった理由) は、コードの元の作成者から、.NET で使用するために再ライセンスする許可を得る必要があることですlibgit2)。

プル リクエストを開始することを決定し、CSharp xfuncname パターンの作成者に のコードの再ライセンスに同意してlibgit2もらう場合は、私に知らせてください。実際の実装で喜んで協力させていただきます!

于 2014-01-13T17:36:29.677 に答える