我想每天从linux下的私有git存储库中获取某个文件。 通过Get content API使用curl命令,我对1MB以下的文件没有任何问题。
curl -H "Content-Type: application/json" -H "Authorization: token $TOKEN" -H 'Accept: application/vnd.github.v3.raw' -O $FILEPATH
由于文件现在大于1MB,我现在不知道如何做到这一点。
Git告诉我使用Git Data API获取blob(最多100MB,对我来说已经足够了)。
虽然我一直试图找到一种方法来获取经常更新的文件的SHA1,但我还没有找到任何适用的方法。有什么建议吗?
或者使用git API以外的其他方法?
提前致谢。
答案 0 :(得分:4)
如果知道存储库中的文件路径,则可以使用Contents API接收其SHA。例如:
~ λ curl -H "Content-Type: application/json" \
-H "Authorization: token $TOKEN" \
-H "Accept: application/vnd.github.v3" \
https://api.github.com/repos/smt116/dotfiles/contents/README.md
{
"name": "README.md",
"path": "README.md",
"sha": "36bba4cf1f8fd3cbbdf81d4cc2291b54a4e56a63",
"size": 16,
"url": "https://api.github.com/repos/smt116/dotfiles/contents/README.md?ref=master",
"html_url": "https://github.com/smt116/dotfiles/blob/master/README.md",
"git_url": "https://api.github.com/repos/smt116/dotfiles/git/blobs/36bba4cf1f8fd3cbbdf81d4cc2291b54a4e56a63",
"download_url": "https://raw.githubusercontent.com/smt116/dotfiles/master/README.md",
"type": "file",
"content": "IyMgTXkgZG90ZmlsZXMuCg==\n",
"encoding": "base64",
"_links": {
"self": "https://api.github.com/repos/smt116/dotfiles/contents/README.md?ref=master",
"git": "https://api.github.com/repos/smt116/dotfiles/git/blobs/36bba4cf1f8fd3cbbdf81d4cc2291b54a4e56a63",
"html": "https://github.com/smt116/dotfiles/blob/master/README.md"
}
}
现在,您可以使用Git Data API使用JSON响应中包含的git_url
链接下载该文件。
但是,如果要从给定存储库下载所有blob,可以先使用Git Trees来获取列表。您需要指定提交SHA,但如果最近的提交没问题,您可以使用HEAD。例如:
~ λ curl -H "Content-Type: application/json" \
-H "Authorization: token $TOKEN" \
-H "Accept: application/vnd.github.v3.raw" \
https://api.github.com/repos/smt116/dotfiles/git/trees/HEAD
{
"sha": "0fc96d75ff4182913cec229978bb10ad338012fd",
"url": "https://api.github.com/repos/smt116/dotfiles/git/trees/0fc96d75ff4182913cec229978bb10ad338012fd",
"tree": [
{
"path": ".agignore",
"mode": "100644",
"type": "blob",
"sha": "e2ca571728887bce8255ab3f66061dde53ffae4f",
"size": 21,
"url": "https://api.github.com/repos/smt116/dotfiles/git/blobs/e2ca571728887bce8255ab3f66061dde53ffae4f"
},
{
"path": ".bundle",
"mode": "040000",
"type": "tree",
"sha": "4148d567286de6aa47047672b1f2f73d7bea349b",
"url": "https://api.github.com/repos/smt116/dotfiles/git/trees/4148d567286de6aa47047672b1f2f73d7bea349b"
},
...
要获取包含子目录在内的所有文件的详细信息,您必须向URL添加recursive=1
查询参数。
然后,您需要解析JSON响应,过滤那些blob
类型的项目并使用url
属性下载文件。