首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#从GitHub下载包含子目录和文件的完整目录结构(Octokit.Net)

C#从GitHub下载包含子目录和文件的完整目录结构(Octokit.Net)
EN

Stack Overflow用户
提问于 2017-03-25 21:27:53
回答 2查看 946关注 0票数 1

我正在尝试弄清楚(在C#中)如何通过API下载我的GitHub存储库中包含内容(文件和文件夹)的目录。一些文章提到了Octokit.Net,所以我下载了它,并写了以下几行:

代码语言:javascript
复制
var github = new GitHubClient(new ProductHeaderValue("PROJECT"), new InMemoryCredentialStore(new Credentials("xxxtokenxxx")));

var repositories =  github.Repository.GetAllForCurrent().Result;

var repository = repositories.Single(x => x.Name == "MyRepo");

嗯,然后我得到了存储库,它工作了,但我不确定从这里到哪里去?

如何将包含所有文件的Folder1 (如下所示)和包含某个结构中的文件的Folder2下载到本地硬盘?

https://github.com/PROJECT/MyRepo/tree/2016-1/Folder1/Folder2

有人能帮我找到正确的方向吗?非常感谢您的帮助。谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-07-13 02:48:34

根据Octokit上的问题#1950 download whole folder/directory from repository,考虑到github API的限制,这是不可能的。您可以做的最好的是下载整个存储库,并自己解析文件:

代码语言:javascript
复制
var archiveBytes = await client.Repository.Content.GetArchive("octokit", "octokit.net", ArchiveFormat.Zipball);
票数 0
EN

Stack Overflow用户

发布于 2017-03-25 21:37:53

为什么不使用GIT run via Process呢?喜欢

代码语言:javascript
复制
Process proc = new Process();
proc.StartInfo.FileName = @"git";
proc.StartInfo.Arguments = string.Format(@"clone ""{0}"" ""{1}""", repository_address, target_directory);
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForInputIdle();

我想这应该行得通。但我也可能是错的。:)

编辑:设置用户凭据的

代码语言:javascript
复制
// Create process
Process proc = new Process();
proc.StartInfo.FileName = @"*your_git_location*\\git-bash.exe";
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
// Wait for it to run
proc.WaitForInputIdle();
// Set up user name
proc.StandardInput.WriteLine("git config user.name ""your_user_name""");
proc.WaitForInputIdle();
// Set up user email
proc.StandardInput.WriteLine("git config user.email ""your_user_email""");
proc.WaitForInputIdle();
// Request clone of repository
proc.StandardInput.WriteLine(string.Format(@"git clone ""{0}"" ""{1}""", repository_address, target_directory););
proc.WaitForInputIdle();
// Now git should ask for your password
proc.StandardInput.WriteLine("your_password");
proc.WaitForInputIdle();
// Now clone should be complete
proc.Dispose();

这应该可以工作,我还没有测试它,可能还有一些语法错误,但我相信你会解决这些问题的。关于GIT中的身份验证,可以使用称为凭据助手的功能来存储凭据,尽管我不太确定如何设置。我认为这个问题是一个很好的开始,试着从那里开始研究:

Is there a way to skip password typing when using https:// on GitHub?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43016935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档