使用 Octokit.net 从 GitHub 存储库下载最新版本

问题描述

如何使用 Octokit.net 以编程方式将私有存储库的最新版本下载为 zip 文件

我不想下载整个存储库,只想下载指定版本的源代码,例如最新版本。

到目前为止,我已经创建了一个使用 GitHubToken 授权的 GitHubClient,并且我已经获得了 repo 中所有版本的列表。我可以获得有关最新版本的信息,例如名称标签、Url 和 ZipballUrl 等。

我尝试使用 ZipballUrl 下载该版本,但它没有返回有效的 zip。

在我下面的代码中,我试图从 Octokit 存储库下载最新版本。

    String workspaceName = "octokit";
    String repositoryName = "octokit.net";
    String filename = "temp.zip";

    var client = new GitHubClient(new ProductHeaderValue(repositoryName));
    String GitHubToken = "--- token goes here ---";
    var tokenAuth = new Credentials(GitHubToken);
    client.Credentials = tokenAuth;
    
    // Retrieve a List of Releases in the Repository,and get latest using [0]-subscript
    var releases = await client.Repository.Release.GetAll(workspaceName,repositoryName);
    var latest = releases[0];

    // Get a HttpResponse from the Zipball URL,which is then converted to a byte array
    var response = await client.Connection.Get<object>(new Uri(latest.ZipballUrl),new Dictionary<string,string>(),"application/json");
    byte[] releaseBytes = Encoding.ASCII.GetBytes(response.HttpResponse.Body.ToString());

    // Create the resulting file using the byte array
    await File.WriteallBytesAsync(filename,releaseBytes);

我不是很熟悉 GitHubClient,也不是 Http- 或 WebClient,所以我无法判断错误是出在 HttpResponse 和我从那里获得的内容,还是文件写入过程中的其他任何地方。

解决方法

已解决:

我无法完全使用 GitHubClient 解决这个问题,所以我仍然很想知道这是否可行。

但是,在使用 Octokit 找到 ZipballUrl 后,我通过添加一个 WebClient 来处理下载,从而设法解决了这个问题。这必须配置 User-Agent 和 Authorization 标头才能工作。

var latest = releases[0];
           
WebClient webClient = new WebClient();
webClient.Headers.Add("user-agent","Anything");
webClient.Headers.Add("authorization","token " + GitHubToken);
await webClient.DownloadFileTaskAsync(new Uri(latest.ZipballUrl),filename);