2

レポに接続しようとしています:

using(var Git = new Repository(
    Repository.Clone("https://github.com/wikimedia/mediawiki-core", "tmp")
)){
    foreach(var Commit in Git.Commits)
    {
        MessageBox.Show(Commit.Author.Name);
    }
}

問題なく接続します (URL を変更すると、予想される例外が発生します) が、何MessageBoxも表示されません。なぜですか? これは単純なはずです。

4

1 に答える 1

9

あなたの質問に関して考慮すべき点がいくつかあります:

  • リモートリポジトリに「接続」して、git プロトコルを介して 1 つのファイルを動的に取得することはできません。通常、( を介して) ローカル コピーを取得してからRepository.Clone()、ローカル リポジトリに対して何らかの作業を実行することが期待されます。
  • Mediawiki-coreは非常に巨大なリポジトリです。10000 件以上のコミットが含まれています。そのため、クローンの作成にはかなりの時間がかかる場合があります。Clone()メソッドに転送進行ハンドラーを提供することで、クローン作成の進行状況に関する洞察を得ることができます。
  • @CarlosMartínNietoは正しいです。必要なのは (リポジトリの全履歴ではなく) 1 つのファイルだけである場合、GitHub APIに依存する方が確かに効率的です。ただし、この API の使用は、予測される使用状況に応じて、考慮すべきいくつかのレート制限によって管理されることに注意してください。

以下のコード (あなた自身のコードから大いにインスピレーションを得ています) は、リモート リポジトリをクローンし、現在のクローンの進行状況をコンソールに出力し、から到達可能なコミットを列挙しHEADます。

LibGit2Sharp v0.14.1 NuGet パッケージに対して正常にテストされています。

public void CloneAndEnumerateCommitsFromHead()
{
    var tmp = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());

    string path = Repository.Clone(
        "https://github.com/nulltoken/TestGitRepository", 
        tmp,
        onTransferProgress: ProgressHandler);

    using (var Git = new Repository(path))
    {
        foreach (var Commit in Git.Commits)
        {
            Console.WriteLine("{0} by {1}",
                Commit.Id.ToString(7),
                Commit.Author.Name);
        }
    }
}

private int ProgressHandler(TransferProgress progress)
{
    Console.WriteLine("{0}/{1}", progress.IndexedObjects, progress.TotalObjects);
    return 0;
}

実行すると、次のように出力されます

0/70
1/70
2/70
2/70
...snipped for brevity...
68/70
69/70
70/70
70/70
49322bb by A U Thor
d0114ab by A U Thor
f73b956 by A U Thor
6e14752 by A U Thor
1203b03 by A U Thor
bab66b4 by A U Thor
83834a7 by A U Thor
6462e7d by A U Thor
42e4e7c by A U Thor
7f82283 by A U Thor
59706a1 by A U Thor
c070ad8 by A U Thor
d31f5a6 by A U Thor
83d2f04 by A U Thor
6db9c2e by A U Thor
d86a2aa by A U Thor
0966a43 by A U Thor
2c34933 by A U Thor
ac7e7e4 by A U Thor
58be465 by A U Thor
6c8b137 by A U Thor
于 2013-11-25T09:01:28.220 に答える