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

时间:2016-05-09 10:01:46

标签: php api curl gitlab

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

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

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

API文档说:

GET /projects/:id/repository/tree

这个URL可以正常使用curl GET函数:

https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree

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

为了澄清,顶级内容列表的工作代码的链接是:

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

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

  

id (必填) - 项目的ID
  路径(可选) - 存储库中的路径。用来争夺子目录
   ref_name (可选) - 存储库分支或标记的名称,如果没有给出默认分支

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

$url = "https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree?path=SUBDIRECTORY";

返回一个空字符串。如果我遗漏了一些东西,我也尝试了以下各项:

$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));

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

供参考,现有问题没有帮助:

How to get subfolders and files using gitlab api

How to access source code files and list directories using GitLab API?

两种答案都不能超过当前文档中提供的答案或提供有效工作解决方案的具体示例。

1 个答案:

答案 0 :(得分:0)

好的,通过执行以下一项或两项操作解决了问题(我不知道哪一个解决了它):

  • 添加了SSH密钥

  • 在网址中使用了项目ID而不是NAMESPACE / PROJECTNAME。

然后使用URL上的?path = SUBDIRECTORY& ref_name = master(如问题所示),它可以正常工作。