如何从Github PROTECTED存储库中仅获取文件

时间:2013-10-14 10:26:25

标签: curl github download wget

我正在尝试下载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运行它)

4 个答案:

答案 0 :(得分:6)

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

这就像一个魅力!

感谢Robert @ Github

答案 1 :(得分:2)

您可以使用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

答案 2 :(得分:0)

您需要按照其中的说明创建一个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”将其保存在磁盘上

答案 3 :(得分:0)

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

https://api.github.com/repos/<owner>/<repo>/contents/<path/to/file>

login:token中发送CURLOPT_USERPWD

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