我正在尝试弄清楚(在 C# 中(如何通过 API 在我的 GitHub 存储库中下载包含内容(文件和文件夹(的目录。有些文章提到了 Octokit.Net 所以我下载了这篇文章并写了以下几行:
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");
好吧,然后我得到了存储库并且它可以工作,但我不确定从这里开始?
如何将包含所有文件的文件夹 1(如下所示(和包含结构中文件的文件夹 2 下载到我的本地硬盘?
https://github.com/PROJECT/MyRepo/tree/2016-1/Folder1/Folder2
谁能帮助我朝着正确的方向前进?非常感谢您的帮助。谢谢
根据问题 #1950 从 Octokit 上的存储库下载整个文件夹/目录,鉴于 github API 的限制,这是不可能的。 你能做的最好的事情就是下载整个存储库并自己解析文件:
var archiveBytes = await client.Repository.Content.GetArchive("octokit", "octokit.net", ArchiveFormat.Zipball);
为什么不使用 GIT 通过进程运行?喜欢
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();
我认为这应该有效。但我也可能错了。:)
编辑:设置用户凭据
// 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 中的身份验证,可以使用称为凭据助手的功能以某种方式存储凭据,因为我不确定如何设置它。我认为这个问题是一个好的开始,尝试从那里进行研究:
在 GitHub 上使用 https://时有没有办法跳过密码输入?