How to connect to a GitHub repo using libgit2?

I’m trying to connect to a repo:

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);
    }
}

It connects ok (as in, if I change the URL I get the expected exception), but no MessageBoxes are shown – why? This should be simple.

  • If I do Index.Stage() and then Commit() in Libgit2Sharp, is there a race condition?
  • LibGitSharp: Checkout Remote Branch
  • What details difference between server side and client of GIT smart HTTP protocol
  • Git mega squash all sequential commits with same message and author
  • Git stash on windows extremly slow compared to Libgit2
  • Find out the branch a commit belongs to in LibGit2Sharp?
  • What HTTP Protocols does GIT use when cloning and pushing?
  • LibGit2Sharp and TFS Git repository
  • One Solution collect form web for “How to connect to a GitHub repo using libgit2?”

    Few things to consider regarding your question:

    • One cannot “connect” to a remote repository and dynamically retrieve one file through the git protocols. Usually, it is expected to retrieve a local copy (through Repository.Clone()) then to perform some work against the local repository.
    • Mediawiki-core is quite a huge repository. It contains more than 10000 commits. As such, it can take quite some time to be cloned. One can get some insight regarding the progress of the cloning by providing the Clone() method with a transfer progress handler.
    • @CarlosMartínNieto is right. If all you need is one single file (rather than the whole history of the repository), relying on the GitHub API would indeed be more efficient. Note that usage of this API is however governed through some rate limitations you may want to consider, depending on the foreseen usage.

    The code below (greatly inspired from your own code) clones a remote repository, outputting the current clone progress to the console, and enumerates the commits reachable from HEAD.

    It’s been successfully tested against LibGit2Sharp v0.14.1 NuGet package.

    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;
    }
    

    When being run, it outputs the following

    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
    
    Git Baby is a git and github fan, let's start git clone.