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

H. *_*ang 5 git github

我想每天从linux下的私有git存储库中获取某个文件.通过使用curl命令获取内容API,我对1MB以下的文件没有任何问题,如下所示.

curl -H "Content-Type: application/json" -H "Authorization: token $TOKEN" -H 'Accept: application/vnd.github.v3.raw' -O $FILEPATH
Run Code Online (Sandbox Code Playgroud)

由于文件现在大于1MB,我现在不知道如何做到这一点.

Git告诉我使用Git Data API来获取blob(高达100MB,对我来说已经足够了).

虽然我一直试图找到一种方法来获取经常更新的文件的SHA1,但我还没有找到任何适用的方法.有什么建议吗?

或者可能除了使用git API之外的其他方法?

提前致谢.

sme*_*fju 5

如果存储库中的文件路径已知,您可以使用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"
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用包含在 JSON 响应中的链接通过Git Data API下载文件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"
    },
    ...
Run Code Online (Sandbox Code Playgroud)

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

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