GitLab API的以下REST Url为我提供了项目的存储库树。
获取回购树(WORKS)
https://gitlab.gspt.net/api/v3/projects/2931/repository/tree?private_token=XXXX
输出:
[
{
"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"
}
]
但是我无法获得文件的原始内容,确切地说是pom.xml。
获取文件的原始内容(不工作 - 给404)
https://gitlab.gspt.net/api/v3/projects/2931/repository/files/pom%2Exml/raw?private_token=xxxx&ref_name=master
输出:
{
"error": "404 Not Found"
}
根据此处的文档(https://docs.gitlab.com/ee/api/repository_files.html#get-raw-file-from-repository),我指定了正确的rest url。然而,唯一不同的是在其余的api端点中使用V4而不是V3。我四处搜索但找不到v3 api的终点。
答案 0 :(得分:3)
首先,为了以防万一,不要对“。”进行百分比编码:
.../files/pom.xml/raw?...
^^
其次,您可以在merge request 9637和this comparison
中查看文件端点从v3到v4的影响方式v3:
GET /projects/:id/repository/raw_blobs/:sha
v4:
GET /projects/:id/repository/blobs/:sha/raw
您可以看到示例(在第3版中)没有对点进行百分比编码。
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'
但是,v3 API只允许获取原始blob,而不是原始文件 见merge request 16834:
- 将
/projects/:id/repository/files
修改为/projects/:id/repository/files/:filepath
(:filepath
应为网址编码)- 将
/projects/:id/repository/blobs/:sha
移至/projects/:id/repository/files/:filepath/raw
只有v4 API允许:filepath
个参数。
请参阅“Git objects SHA-1 are file contents or file names?”以解码从API v3获得的原始blob。
答案 1 :(得分:0)
注意 dot(.) 编码版本: 看 wiki
. == %2E