如何使用 Gitlab API(使用 PHP curl)获取 Gitlab 存储库中子目录的内容

Mik*_*e A 2 php api curl gitlab

我正在尝试使用 Gitlab API 从存储库子目录获取存储库内容列表。

由于顶级访问工作正常,我假设问题不是授权或一般方法,而是为子目录传递的 URL 和参数。或者,这可能是 Gitlab API 已记录但未实现的功能。

例如,使用 PHP 和curl GET,以下 URL 适用于文件和文件夹的顶级列表:

API 文档说:

GET /projects/:id/repository/tree
Run Code Online (Sandbox Code Playgroud)

这个 URL 与curl GET 函数一起工作正常:

https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree
Run Code Online (Sandbox Code Playgroud)

(我在另一个 gitlab 线程中找到了带有 %2F 的 USERNAME%2FPROJECTNAME 。这似乎是文档中 ID 的含义)

为了澄清起见,顶级内容列表的工作代码片段是:

$url = "https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree";
$ch = curl_init($url);
Run Code Online (Sandbox Code Playgroud)

因此,对于子目录访问,API 文档列出了参数:

id (必需)- 项目
路径的 ID (可选)- 存储库内的路径。用于获取子目录的内容
ref_name(可选) - 存储库分支或标签的名称,或者如果没有给出默认分支

因此,基于此,我尝试了以下各项作为上面的curl_init命令的URL:

$url = "https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree?path=SUBDIRECTORY";
Run Code Online (Sandbox Code Playgroud)

这将返回一个空字符串。为了防止我遗漏了什么,我还尝试了以下各项:

$params = array( 'path' => SUBDIRECTORY);

$url = "https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree . "?" . http_build_query($params);

$url = "https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree . "?" . urlencode(http_build_query($params));

$url = "https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree . "%3F" . urlencode(http_build_query($params));
Run Code Online (Sandbox Code Playgroud)

但所有这些都从 Gitlab API 返回一个空字符串。不是错误,只是空字符串。


作为参考,现有的问题没有帮助:

如何使用gitlab api获取子文件夹和文件

如何使用 GitLab API 访问源代码文件并列出目录?

当前文档中没有提供更多答案,也没有给出可行解决方案的具体示例。

Mik*_*e A 5

好的,通过执行以下一项或两项操作即可解决问题(我不确定哪一项解决了问题):

  • 添加了 SSH 密钥

  • url 中使用了项目 ID,而不是 NAMESPACE/PROJECTNAME。

然后在 URL 上使用 ?path=SUBDIRECTORY&ref_name=master (如所讨论的),它起作用了。

  • 3000 次观看却没有一个点赞?那好吧 (2认同)