如何通过 GitLab REST API 获取文件的原始内容?

Nit*_*tal 5 git rest gitlab

GitLab API 的以下 REST Url 为我提供了项目的存储库树。

获取回购树(工作)

https://gitlab.gspt.net/api/v3/projects/2931/repository/tree?private_token=XXXX
Run Code Online (Sandbox Code Playgroud)

输出:

[
    {
        "id": "a49d11794ed56db7f935abfd61002aef67159d10",
        "name": "src",
        "type": "tree",
        "path": "src",
        "mode": "040000"
    },
    {
        "id": "0fbd98527d4b36e3d22c164293d8fd8eee4d18cd",
        "name": ".gitignore",
        "type": "blob",
        "path": ".gitignore",
        "mode": "100644"
    },
    {
        "id": "0ef0da472176f2e6a24843ac9d4bb738c8310d23",
        "name": "pom.xml",
        "type": "blob",
        "path": "pom.xml",
        "mode": "100644"
    }
]
Run Code Online (Sandbox Code Playgroud)

但我无法获得文件的原始内容,确切地说是 pom.xml。

获取文件的原始内容(不起作用 - 给出 404)

https://gitlab.gspt.net/api/v3/projects/2931/repository/files/pom%2Exml/raw?private_token=xxxx&ref_name=master
Run Code Online (Sandbox Code Playgroud)

输出:

{
    "error": "404 Not Found"
}
Run Code Online (Sandbox Code Playgroud)

根据此处的文档(https://docs.gitlab.com/ee/api/repository_files.html#get-raw-file-from-repository),我指定了正确的 rest url。然而,唯一不同的是在其余 api 端点中使用 V4 而不是 V3。我四处搜索,但找不到 v3 api 的端点。

Von*_*onC 7

首先,为了以防万一,不要对“.”进行百分比编码:

.../files/pom.xml/raw?...
            ^^
Run Code Online (Sandbox Code Playgroud)

其次,您可以检查合并请求 9637中文件端点从 v3 到 v4 受到的影响以及此比较

v3:
GET /projects/:id/repository/raw_blobs/:sha
v4:
GET /projects/:id/repository/blobs/:sha/raw
Run Code Online (Sandbox Code Playgroud)

您可以看到示例(v3 中)没有对点进行百分比编码。

curl --request GET --header 'PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK' \
  'https://gitlab.example.com/api/v3/projects/13083/repository/files?file_path=app/models/key.rb&ref=master'
Run Code Online (Sandbox Code Playgroud)

但是,v3 API 只允许获取原始 blob,而不是原始文件。
请参阅合并请求 16834

  • 修改/projects/:id/repository/files/projects/:id/repository/files/:filepath:filepath应该是URL编码的)
  • 搬去/projects/:id/repository/blobs/:sha/projects/:id/repository/files/:filepath/raw

仅 v4 API 允许使用:filepath参数。

请参阅“ Git 对象 SHA-1 是文件内容还是文件名? ”来解码从 API v3 获得的原始 blob。