可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
On the CI server, I want to fetch a config file that we maintain on Github so it can be shared between many jobs. I'm trying to get this file via curl, but these approaches both fail (I get a 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
回答1:
The previous answers don't work (or don't work anymore).
You can use the V3 API to get a raw file like this (you'll need an OAuth token):
curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://api.github.com/repos/owner/repo/contents/path
All of this has to go on one line. The -O
option saves the file in the current directory. You can use -o filename
to specify a different filename.
To get the OAuth token follow the instructions here:
https://help.github.com/articles/creating-an-access-token-for-command-line-use
I've written this up as a gist as well:
https://gist.github.com/madrobby/9476733
EDIT: API references for the solution are as follows:
- https://developer.github.com/v3/#authentication
- https://developer.github.com/v3/media/#request-specific-version
- https://developer.github.com/v3/repos/contents/#get-contents
回答2:
Alternatively, you can use a github "personal access token" (https://github.com/settings/tokens):
TOKEN=...
curl -s https://$TOKEN@raw.githubusercontent.com/<user or organization>/<repo name>/<branch>/<path to file>/<file_name>
Example:
$ curl -s https://1bacnotmyrealtoken123beefbea@raw.githubusercontent.com/concourse/concourse/master/README.md
....
回答3:
I know this is an old question, but none of the solutions proposed above worked for me. Perhaps the API has changed since then.
This worked:
curl -H 'Authorization: token [insert your token here]' -o output.txt https://raw.githubusercontent.com/[organization]/[repo]/[branch]/[path to file]
回答4:
I was struggling with this for a few minutes until I realized all that is needed is to wrap the url in quotes to escape the ampersand.
curl "https://raw.github.com/org/repo/file?login=username&token=the_token"
That worked for me in my private repo.
回答5:
Or, if you don't have a token:
curl --user [your_user] 'https://raw.github.com/path/to/file.config' > file.config
回答6:
I ran into an authentication error when the url was redirected to Amazon S3:
Only one auth mechanism allowed; only the X-Amz-Algorithm
query parameter...
Changing from the Authorization: token X
header to the ?access_token=<token>
query param worked for me.
回答7:
We had to download files from private GitHub repos fairly often and hacky shell scripts weren't quite cutting it, so we created fetch, which is an open source, cross-platform tool that makes it easy to download source files and release assets from a git tag, commit, or branch of public and private GitHub repos.
For example, to download the file baz
from version 0.1.3
of a private GitHub repo to /tmp
, you would do the following:
GITHUB_OAUTH_TOKEN="your token"
fetch --repo="https://github.com/foo/bar" --tag="0.1.3" --source-path="/baz" /tmp
回答8:
Below should work fine. A "raw" before your branch name (master in this case).
curl -L -O https://github.com/your/repo/raw/master/fetch_file.sh
回答9:
Just an addition to the accepted answer, If you are using Github Enterprise url is slightly different:
curl -H 'Authorization: token [your token]' \
-H 'Accept: application/vnd.github.v3.raw' \
-L https://[your domain]/api/v3/repos/[owner]/[repo-name]/contents/[path of file]
回答10:
You can do this with a raw link.
curl -O https://raw.githubusercontent.com/owner/repo/branchname/path/to/file