我们得去找一个私人回购公司。对于公共网站,通过GitHub API或手动操作都很容易(https://github.com/user/repo/zipball/master)。但是私人回购呢?即使有oAuth令牌,也不太明显怎么做。
a2mppw5e1#
新选择
因为给定的接受答案不再起作用,我想我应该解释一下我是如何通过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令牌,方法是转到你的设置,然后选择“Developer settings”/“Personal access tokens”。我创造了一个私人代币。然后使用以下页面上的说明,我发现了如何获得您有权访问的私有回购: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...替换为您的实际令牌。
ab499f3b...
elcex8rz2#
cURL允许HTTP头和请求参数操作。举例来说:curl -L-H”授权:令牌$TOKEN”https://api.github.com/repos/octocat/Hello-World/zipball--输出hello.tar.zip或curl -L https://api.github.com/repos/octocat/Hello-World/zipball?access_token=$TOKEN--输出hello.tar.zip
vvppvyoh3#
**编辑:**此功能不再有效。
关于CURL:
curl -L -F "login=$USER" -F "token=$TOKEN" https://github.com/$USER/$REPO/$PKGTYPE/$BRANCHorTAG
字符串其中$TOKEN是您的github配置文件上的API令牌,而不是用于与APIv 3通信的oAuth2令牌。$USER是与令牌连接的用户帐户,不一定是存储库所属的组织/其他用户。$USER的第二个示例是存储库的用户/帐户。$REPO是私有存储库的名称$PKGTYPE是tarball或zipball,$BRANCHorTAG是一个分支,比如master,或者是一个提交的标记名。$USER的第一个示例必须能够访问属于$USER的第二个示例的存储库。我在任何地方都找不到这个文件,所以如果你想要更详细的东西,我也有一点关于它的文章。
$TOKEN
$USER
$REPO
$PKGTYPE
$BRANCHorTAG
ymdaylpp4#
我遇到了同样的问题,这对我很有效(截至2015年2月):
curl -O -J -L -u $YOUROAUTHKEY:x-oauth-basic https://github.com/$USER/$REPO/archive/master.zip
字符串oAuth作为头解决方案对我不起作用,但起作用的是将密钥填充到用户名中并指定类型。然后它给出了一个302重定向到正确的链接。Verbose命令确实帮助我解决了我使用的凭据是否被接受的问题(404vs 401)
n53p2ov05#
我似乎没有问题得到一个zipball从私人repos下载。我使用您指定的相同格式,它工作得很好。我使用OAuth2来获取存储库,但我使用您给出的格式为zip ball构建链接。Here is the application我在里面做这个。如果你想获得一个OAuth2令牌,只需使用GitHubt API v3,这很简单。虽然这并不完全符合您的问题:This是我从GitHub为this chrome extension获取OAuth2令牌的方式
更新
@jayarjo我在第202行构建了URL。我只是像你指定的那样构建URL,OAuth2令牌甚至没有用于它。我的令牌允许我做的就是在创建标记之前获取所有用户的私有数据。但它的工作没有问题...我认为我实际上能够下载zipball的原因是因为URL实际上是https://github.com/ *,并且因为我目前登录了OAuth2,所以我有权访问该URL -听起来你没有,所以你得到了404错误。你可以尝试向页面发送一个请求,如果你得到一个错误响应,提示用户首先登录,那么当你请求zipball时,你应该没有问题。
piok6c0g6#
除了api.github.com,您可以直接从github.com下载tarball/zipball:(对于公共存储库,可以省略令牌头-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还是玩zipballcurl -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://stackoverflow.com/a/23796159生成令牌
api.github.com
github.com
-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
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
bkhjykvo7#
您可以使用基本身份验证或基于令牌的方法。更多详细信息请参见https://help.github.com/articles/downloading-files-from-the-command-line。
7条答案
按热度按时间a2mppw5e1#
新选择
因为给定的接受答案不再起作用,我想我应该解释一下我是如何通过github API中的新变化来做到这一点的。
新的下载API链接
首先,我在这里找到了有关下载存档的信息:https://developer.github.com/v3/repos/contents/#get-archive-link
公开回购
如果这是一个公共回购,那么它很容易……您可以:
字符串
私人回购
如果它是一个私有的仓库,你需要创建一个oAuth令牌,方法是转到你的设置,然后选择“Developer settings”/“Personal access tokens”。我创造了一个私人代币。
然后使用以下页面上的说明,我发现了如何获得您有权访问的私有回购:https://developer.github.com/v3/#authentication
完整代码
型
请确保将
ab499f3b...
替换为您的实际令牌。elcex8rz2#
cURL允许HTTP头和请求参数操作。举例来说:
curl -L
-H”授权:令牌$TOKEN”
https://api.github.com/repos/octocat/Hello-World/zipball--输出hello.tar.zip
或
curl -L https://api.github.com/repos/octocat/Hello-World/zipball?access_token=$TOKEN--输出hello.tar.zip
vvppvyoh3#
**编辑:**此功能不再有效。
关于CURL:
字符串
其中
$TOKEN
是您的github配置文件上的API令牌,而不是用于与APIv 3通信的oAuth2令牌。$USER
是与令牌连接的用户帐户,不一定是存储库所属的组织/其他用户。$USER
的第二个示例是存储库的用户/帐户。$REPO
是私有存储库的名称$PKGTYPE
是tarball或zipball,$BRANCHorTAG
是一个分支,比如master,或者是一个提交的标记名。$USER
的第一个示例必须能够访问属于$USER
的第二个示例的存储库。我在任何地方都找不到这个文件,所以如果你想要更详细的东西,我也有一点关于它的文章。
ymdaylpp4#
我遇到了同样的问题,这对我很有效(截至2015年2月):
字符串
oAuth作为头解决方案对我不起作用,但起作用的是将密钥填充到用户名中并指定类型。然后它给出了一个302重定向到正确的链接。
Verbose命令确实帮助我解决了我使用的凭据是否被接受的问题(404vs 401)
n53p2ov05#
我似乎没有问题得到一个zipball从私人repos下载。我使用您指定的相同格式,它工作得很好。
我使用OAuth2来获取存储库,但我使用您给出的格式为zip ball构建链接。Here is the application我在里面做这个。
如果你想获得一个OAuth2令牌,只需使用GitHubt API v3,这很简单。虽然这并不完全符合您的问题:
This是我从GitHub为this chrome extension获取OAuth2令牌的方式
更新
@jayarjo我在第202行构建了URL。我只是像你指定的那样构建URL,OAuth2令牌甚至没有用于它。我的令牌允许我做的就是在创建标记之前获取所有用户的私有数据。但它的工作没有问题...
我认为我实际上能够下载zipball的原因是因为URL实际上是https://github.com/ *,并且因为我目前登录了OAuth2,所以我有权访问该URL -听起来你没有,所以你得到了404错误。
你可以尝试向页面发送一个请求,如果你得到一个错误响应,提示用户首先登录,那么当你请求zipball时,你应该没有问题。
piok6c0g6#
除了
api.github.com
,您可以直接从github.com
下载tarball/zipball:(对于公共存储库,可以省略令牌头
-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://stackoverflow.com/a/23796159生成令牌
bkhjykvo7#
您可以使用基本身份验证或基于令牌的方法。更多详细信息请参见https://help.github.com/articles/downloading-files-from-the-command-line。