我正在使用 gitlab api 来获取文件和文件夹并成功,
但我只能获取目录名称,而不是其子文件夹和文件。
那么,我怎样才能获得我的存储库的完整树。
请告诉我。
在此先感谢, Mallikarjuna
我正在使用 gitlab api 来获取文件和文件夹并成功,
但我只能获取目录名称,而不是其子文件夹和文件。
那么,我怎样才能获得我的存储库的完整树。
请告诉我。
在此先感谢, Mallikarjuna
根据API,我们可以使用
GET /projects/:id/repository/tree
列出项目中的文件和目录。但是我们只能通过这种方式获取 repo 顶层的文件和目录,以及顶层目录的子目录 param path
。
例如,如果您想获取 的目录script/js/components
,您可以使用
GET /projects/:id/repository/tree?path=script/js/components
您可以使用递归选项使用 /projects/:id/repository/tree?recursive=true 来获取完整的树
例如:https://your_gitlab_host/api/v4/projects/:id/repository/tree?recursive=true&per_page=100
您还可以使用最近发布的Gitlab GraphQL API以递归方式获取树:
{
project(fullPath: "project_name_here") {
repository {
tree(ref: "master", recursive: true){
blobs{
nodes {
name
type
flatPath
}
}
}
}
}
}
您可以转到以下 URL:https://$gitlab_url/-/graphql-explorer 并通过上述查询
Graphql 端点是“https://$gitlab_url/api/graphql”上的 POST 使用curl和jq的示例:
gitlab_url=<your gitlab host>
access_token=<your access token>
project_name=<your project name>
branch=master
curl -s -H "Authorization: Bearer $access_token" \
-H "Content-Type:application/json" \
-d '{
"query": "{ project(fullPath: \"'$project_name'\") { repository { tree(ref: \"'$branch'\", recursive: true){ blobs{ nodes { name type flatPath }}}}}}"
}' "https://$gitlab_url/api/graphql" | jq '.'
您应该对文件的完整路径进行 url 编码。例如,以免假设您的存储库下的文件路径是:javascript/header.js
那么你可以使用: curl --head --header "PRIVATE-TOKEN: <your_access_token>" "https://<>/api/v4/projects//repository/files/javascript%2Fheader%2Ejs"
当然,正如其他回复中提到的,您错过了gitlab 存储库 APIpath
的属性,该属性可让您浏览文件层次结构。
此外,为简单起见,python gitlab 项目通过项目 API公开它。例子:
# list the content of the root directory for the default branch
items = project.repository_tree()
# list the content of a subdirectory on a specific branch
items = project.repository_tree(path='docs', ref='branch1')