无论如何以编程方式获取私有github repo的zipball?

时间:2012-02-29 18:43:14

标签: git oauth github repository

我们有必要获取私人仓库的拉链球。对于公共的,通过GitHub API或手动( https://github.com/user/repo/zipball/master )非常容易。但私人回购怎么样?即使拥有oAuth令牌也不是很明显。

6 个答案:

答案 0 :(得分:32)

新选择

因为给定的已接受的答案不再起作用,我想我会解释如何使用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令牌,方法是转到您的设置,然后选择"开发人员设置" /" 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...替换为您的实际令牌。

答案 1 :(得分:2)

修改:这不再有效。


使用CURL:

curl -L -F "login=$USER" -F "token=$TOKEN" https://github.com/$USER/$REPO/$PKGTYPE/$BRANCHorTAG

其中$TOKEN是github配置文件中的API令牌,而不是用于与APIv3通信的oAuth2令牌。

$USER是令牌所连接的用户帐户,不一定是repo所属的组织/其他用户。 $USER的第二个实例是回购的用户/帐户。

$REPO是私有存储库的名称

$PKGTYPE是tarball或zipball $BRANCHorTAG是一个分支,如master,或者是提交的标记名称。

$USER的第一个实例必须有权访问属于$USER第二个实例的repo。

我无法在任何地方找到这个记录,所以如果你想要更详细的话,我也会有一些关于它的文章。

答案 2 :(得分:2)

我遇到了同样的问题,这对我有用(截至2015年2月):

curl -O -J -L -u $YOUROAUTHKEY:x-oauth-basic https://github.com/$USER/$REPO/archive/master.zip

oAuth作为标题解决方案并不适用于我,但有效的方法是将密钥填入用户名并指定类型。然后它给了一个302重定向与正确的链接。

详细命令确实帮我解决了我正在使用的凭据是否被接受(404 vs 401)

答案 3 :(得分:1)

我似乎没有问题从私人回购中获取拉链以供下载。我使用你指定的相同格式,它完美无缺。

我使用OAuth2获取存储库,但我使用您提供的格式为zip球构建链接。 Here is the application我这样做。

如果您想获得OAuth2令牌,只需使用GitHubt API v3格式,这很简单。虽然这不完全符合您的问题:

This是我如何从GitHub获取this chrome extension

的OAuth2令牌

<强>更新

@jayarjo I build the URL here on line 202。我只是像你指定的那样构建URL,甚至没有使用OAuth2令牌。允许我做的所有令牌都是在创建标记之前获取所有用户的私有数据。但它没有问题......

我认为我实际上能够下载zipball的原因是因为该URL实际上是https://github.com/ *并且因为我目前已登录因为OAuth2我有权访问该网址 - 其中听起来你没有,所以你得到404错误。

您可以尝试向页面发送请求,如果您收到错误响应提示用户先登录,那么当您请求拉链时,您应该没问题。

答案 4 :(得分:1)

cURL 允许 HTTP 标头和请求参数操作。例如:

卷曲-L
-H "授权:令牌 $TOKEN"
https://api.github.com/repos/octocat/Hello-World/zipball --output hello.tar.zip

curl -L https://api.github.com/repos/octocat/Hello-World/zipball?access_token=$TOKEN --output hello.tar.zip

答案 5 :(得分:0)

您可以使用基本身份验证或基于令牌的方法。有关详细信息,请参阅https://help.github.com/articles/downloading-files-from-the-command-line