gpt4 book ai didi

git - 如何从git自动获取某个文件(> 1MB)

转载 作者:太空狗 更新时间:2023-10-29 13:23:02 25 4
gpt4 key购买 nike

我想在 linux 下每天从私有(private) git 存储库中抓取某个文件。我通过 Get content API 处理小于 1MB 的文件没有问题使用 curl 命令如下。

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 之外的其他方法?

提前致谢。

最佳答案

如果存储库中的文件路径已知,您可以使用 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"
},
...

要获取包括子目录在内的所有文件的详细信息,您必须将 recursive=1 查询参数添加到 URL。

然后您需要解析 JSON 响应,过滤那些具有 blob 类型的项目并使用 url 属性下载文件。

关于git - 如何从git自动获取某个文件(> 1MB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38910380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com