我如何使用命令行从私人github回购下载单个原始文件?

在CI服务器上,我想获取一个我们在Github上维护的configuration文件,以便在多个作业之间共享。 我试图通过curl来获取这个文件,但是这些方法都失败了(我得到一个404):

# As advised by the oAuth docs curl -H 'Authorization: token the_token' -L -o setup.sh https://raw.github.com/org/repo/file # The url of the raw file after clicking to view it curl -L https://raw.github.com/org/repo/file?login=username&token=the_token 

以前的答案不工作(或不再工作)。

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

我已经写了这个作为一个要点: https : //gist.github.com/madrobby/9476733

编辑:该解决scheme的API参考如下:

我知道这是一个古老的问题,但是上面提出的解决scheme都没有为我工作。 从那时起API可能已经改变了。

这工作:

curl -H 'Authorization: token [insert your token here]' -o output.txt https://raw.githubusercontent.com/[organization]/[repo]/[branch]/[path to file]

或者,如果你没有一个令牌:

 curl --user [your_user] 'https://raw.github.com/path/to/file.config' > file.config 

或者,您可以使用github“个人访问令牌”( https://github.com/settings/tokens ):

 TOKEN=... curl -s https://$TOKEN@raw.githubusercontent.com/<user or organization>/<repo name>/<branch>/<path to file>/<file_name> 

例:

 $ curl -s https://1bacnotmyrealtoken123beefbea@raw.githubusercontent.com/concourse/concourse/master/README.md .... 

下面应该工作正常。 分支名称之前的“原始”(本例中为主)。

curl -L -O https://github.com/your/repo/raw/master/fetch_file.sh

我一直在挣扎几分钟,直到我意识到所有需要的是将URL包含在引号中以避开&符。

 curl "https://raw.github.com/org/repo/file?login=username&token=the_token" 

这在我的私人回购中适用于我。

当url被redirect到Amazon S3时,我遇到了一个身份validation错误:

只允许一个授权机制; 只有X-Amz-Algorithm查询参数…

Authorization: token X标头更改为?access_token=<token>查询参数为我工作。

我们不得不经常从私有的GitHub回购站点下载文件,而且hacky的shell脚本并没有完全削减它,所以我们创build了fetch ,这是一个开源的跨平台工具,可以很容易地从源文件下载源文件并释放资源git标签,提交或公共和私人GitHub回购分支。

例如,要将私人GitHub库的0.1.3版本的文件baz下载到/tmp ,您可以执行以下操作:

 GITHUB_OAUTH_TOKEN="your token" fetch --repo="https://github.com/foo/bar" --tag="0.1.3" --source-path="/baz" /tmp 

您可以使用原始链接执行此操作。

 curl -O https://raw.githubusercontent.com/owner/repo/branchname/path/to/file