【问题标题】:How to get only a file form a Github PROTECTED repository如何从 Github PROTECTED 存储库中仅获取文件
【发布时间】:2013-10-21 21:32:52
【问题描述】:

我正在尝试下载受 Github 保护的存储库中的项目的安装脚本。

下面的userrepo 替换为正确的信息。

我试过卷曲:

curl -u gabipetrovay -L -o install.sh "https://raw.github.com/user/repo/master/admin/scripts/install.sh"

Curl 提示输入密码,但只要我输入第一个字符,它就会进一步下载一些东西(很多 JS 可能来自 Github)

我也试过 wget:

wget --user=gabipetrovay --ask-password "https://raw.github.com/user/repo/master/admin/scripts/install.sh"

使用 wget 我可以输入完整的密码,但随后出现 503 错误:

Resolving raw.github.com (raw.github.com)... 199.27.73.133
Connecting to raw.github.com (raw.github.com)|199.27.73.133|:443... connected.
HTTP request sent, awaiting response... 503 Connection timed out
2013-10-14 10:18:45 ERROR 503: Connection timed out.

如何获取 install.sh 文件? (我从 Ubuntu 服务器 13.04 运行它)

【问题讨论】:

标签: curl github download wget


【解决方案1】:

您需要按照那里的说明创建一个 oauth 令牌:Github basic authentication

然后你可以使用下面的命令,curl得到一个临时的url,所以你需要在curl中使用'-L'来跟随重定向:

curl -L -u <your token>:x-oauth-basic https://raw.github.com/user/repo/master/admin/scripts/install.sh

您也可以使用 -o "filename" 将其保存在磁盘上

【讨论】:

  • 我已经尝试过了,但它不起作用。您收到 503 错误(即使使用重定向)
【解决方案2】:

Github 大佬的官方回应是:

感谢您与我们联系!对于这种情况,您需要使用我们的 API 下载单个文件:

http://developer.github.com/v3/repos/contents/#get-contents

使用此端点,您可以像这样获取特定文件:

curl -u gabipetrovay -H "Accept: application/vnd.github.raw" "https://api.github.com/repos/user/repo/contents/filename"

在这种情况下,系统只会提示您输入 GitHub 帐户密码,或者您也可以使用 OAuth 令牌。作为参考,我们的 API 入门指南有一个很好的关于身份验证的部分:

http://developer.github.com/guides/getting-started/#authentication

这就像一个魅力!

感谢罗伯特@Github

【讨论】:

    【解决方案3】:

    您可以使用 V3 API 来获取这样的原始文件(您需要一个 OAuth 令牌):

    curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://api.github.com/repos/owner/repo/contents/path

    所有这些都必须放在一条线上。 -O 选项将文件保存在当前目录中。您可以使用-o filename 指定不同的文件名。

    要获取 OAuth 令牌,请按照此处的说明进行操作: https://help.github.com/articles/creating-an-access-token-for-command-line-use

    如果您需要从 shell 脚本执行此操作,这可以实现更好的自动化。

    我也把它写成一个要点: https://gist.github.com/madrobby/9476733

    【讨论】:

    • 如果您想检索存储在特定标签中的文件(例如:my_unit_rest),您可以按如下方式指定 curl 命令(如在 bash 脚本中):USER="me"; PASSWD="mypasswd"; OUTPUT_FILEPATH="./foo"; OWNER="mycompany"; REPOSITORY="boo"; RESOURCE_PATH="project-x/a/b/c.py"; TAG="my_unit_test"; curl -u "$USER:$PASSWD" -H 'Accept: application/vnd.github.v4.raw' -o $OUTPUT_FILEPATH" -L "https://api.github.com/repos/$OWNER/$REPOSITORY/contents/$RESOURCE_PATH?ref=$TAG";
    【解决方案4】:

    我正在使用带有 API 的 GitHub,因此只有一种解决方案适用于我的私有存储库:

    https://api.github.com/repos/&lt;owner&gt;/&lt;repo&gt;/contents/&lt;path/to/file&gt;

    CURLOPT_USERPWD 中发送login:token

    它返回数组,其中download_url 具有所需的 url,其中包含令牌,它是动态生成的,与您的访问令牌不同(因此它是解决它的关键)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-21
      • 2011-11-19
      • 2014-09-21
      • 2014-04-19
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      相关资源
      最近更新 更多