我们需要获取一个私有 repo 的 zipball。对于公共的 repo,可以通过 GitHub API 或手动方式简单地获取 (https://github.com/user/repo/zipball/master)。但对于私有 repo,即使拥有 oAuth token 也不太明显该如何操作。
我们需要获取一个私有 repo 的 zipball。对于公共的 repo,可以通过 GitHub API 或手动方式简单地获取 (https://github.com/user/repo/zipball/master)。但对于私有 repo,即使拥有 oAuth token 也不太明显该如何操作。
新的替代方案
由于给出的接受答案不再有效,我想解释一下我是如何利用github API的新变化来实现的。
新的下载API链接
首先,我在这里找到了关于下载存档的信息: https://developer.github.com/v3/repos/contents/#get-archive-link
公共仓库
如果是公共仓库,那就非常简单...你可以这样做:
curl -L https://api.github.com/repos/pengwynn/octokit/tarball > octokit.tar.gz
私有仓库
如果这是一个私有仓库,您需要通过转到设置然后选择“开发者设置”/个人访问令牌来创建一个oAuth令牌。 我已经创建了一个个人令牌。
然后根据以下页面上的说明,我找到了如何获取您有权限访问的私有仓库: https://developer.github.com/v3/#authentication
完整代码
curl -H "Authorization: token ab499f3b..." \
-L https://api.github.com/repos/godzilla/my_priv_repo/tarball > wut.tar.gz
ab499f3b...
替换为您的实际令牌。-L
是我所缺少的...谢谢! - Graham Hency编辑:这个方法已经失效。
使用CURL:
curl -L -F "login=$USER" -F "token=$TOKEN" https://github.com/$USER/$REPO/$PKGTYPE/$BRANCHorTAG
$TOKEN
是您Github个人资料中的API令牌,而不是用于与APIv3通信的oAuth2令牌。
$USER
是令牌连接的用户账户,不一定是组织/其他用户所拥有的存储库。第二个$USER
实例是存储库所属的用户/帐户。
$REPO
是私有存储库的名称。
$PKGTYPE
是tarball或zipball,$BRANCHorTAG
是分支,如master,或提交的标签名称。
第一个$USER
实例必须可以访问属于第二个$USER
实例的存储库。
我找不到这方面的文档,因此如果您需要更详细的信息,我也可以提供一些介绍。
curl -O -J -L -u $YOUROAUTHKEY:x-oauth-basic https://github.com/$USER/$REPO/archive/master.zip
除了 api.github.com
,您还可以直接从 github.com
下载 tarball/zipball:
(对于公共 repo,可以省略令牌头 -H "Authorization: token $(yourToken)"
)
curl -H "Authorization: token $(yourToken)" -o code.tar.gz -L https://github.com/$(username)/$(reponame)/tarball/$(branchName/TagName/hashValue)
curl -H "Authorization: token $(yourToken)" -o code.tar.gz -L https://github.com/$(username)/$(reponame)/archive/$(branchName/TagName/hashValue).tar.gz
或者对于 zipball
curl -H "Authorization: token $(yourToken)" -o code.zip -L https://github.com/$(username)/$(reponame)/zipball/$(branchName/TagName/hashValue)
curl -H "Authorization: token $(yourToken)" -o code.zip -L https://github.com/$(username)/$(reponame)/archive/$(branchName/TagName/hashValue).zip
你可以根据这个答案生成一个令牌https://dev59.com/4Wkx5IYBdhLWcg3wAvmn#23796159
我似乎没有问题从私有仓库下载zipball。我使用您指定的相同格式,它完美地工作。
我使用OAuth2获取存储库,但是我使用您给出的格式构建zip ball的链接。 这是我使用的应用程序。
如果您想获取OAuth2令牌,请使用GitHub API v3格式,它非常简单。尽管这并不完全符合您的问题:
这是我从GitHub获取OAuth2令牌的方法,用于这个Chrome扩展程序。
更新
@jayarjo 我在202行构建URL。我只是像你指定的那样构建URL,OAuth2令牌甚至没有用到它。我的令牌只允许我在创建标记之前获取所有用户的私人数据。但是它可以正常工作...
我认为我实际上能够下载zipball的原因是URL实际上是https://github.com/*,因为我当前已经登录了OAuth2,所以我有权限访问该URL - 而听起来你没有,所以你会得到404错误。
您可以尝试向页面发送请求,如果收到错误响应,请提示用户先登录,然后当您请求zipball时,您应该可以轻松获取它。
您可以使用基本身份验证或令牌验证方法。有关更多详细信息,请参见https://help.github.com/articles/downloading-files-from-the-command-line。