Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用libgit2连接到GitHub repo?_C#_Git_Github_Libgit2_Libgit2sharp - Fatal编程技术网

C# 如何使用libgit2连接到GitHub repo?

C# 如何使用libgit2连接到GitHub repo?,c#,git,github,libgit2,libgit2sharp,C#,Git,Github,Libgit2,Libgit2sharp,我正在尝试连接到回购协议: 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,我会得到预期

我正在尝试连接到回购协议:

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
es-为什么?这应该很简单。

关于你的问题的一些事情要考虑:

  • 不能通过git协议“连接”到远程存储库并动态检索一个文件。通常,它需要检索本地副本(通过
    Repository.Clone()
    ),然后对本地存储库执行一些工作
  • Mediawiki核心是一个相当庞大的存储库。它包含10000多个提交。因此,克隆可能需要相当长的时间。通过为
    Clone()
    方法提供传输进度处理程序,可以了解克隆的进度
  • @卡洛斯马丁尼托是对的。如果您只需要一个文件(而不是存储库的整个历史记录),那么依赖确实会更有效。注意,这个API的使用是通过一些<强> <强>来管理的,这可能取决于预见的用法。
下面的代码(深受您自己代码的启发)克隆了一个远程存储库,将当前克隆进度输出到控制台,并枚举可从
HEAD
访问的提交

它已经针对libgit2sharpv0.14.1nuget包成功地进行了测试

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

存储库最终被克隆了吗?如果使用调试器调试代码会怎么样?@zerkms tmp文件夹已创建,但仍为空。实际上,我只需要一个特定的文件。在这段代码中,您正在做两件完全不相关的事情。首先检查克隆是否工作。如果确实如此,请检查您是否正在加载要加载的存储库。如果你想要的是GitHub中的一个文件,你可能应该使用API来完成这项工作,而不是试图下载存储库。@CarlosMartínNieto我最终使用了raw.GitHub.com——这要容易得多。通常是在你使用为工作而设计的工具时,答案很棒,非常感谢你的洞察力!我已经习惯了SVN,在这里可以复制单个文件,而不必首先克隆整个repo。