GitLab API - 无法访问目录中的文件

N.A*_*.A. 5 gitlab gitlab-api

我有一个 GitLab 项目,其设置如下:

  • myserver.com/SuperGroup/SubGroup/SubGroupProject

以下项目的树是一个顶级txt文件和一个目录内的txt文件。我从 GitLab API 获取树:

  • myserver.com/api/v4/projects/1/repository/tree?recursive=true

[{"id":"aba61143388f605d3fe9de9033ecb4575e4d9b69","name":"myDirectory","type":"tree","path":"myDirectory","mode":"040000"},{"id":"0e3a2b246ab92abac101d0eb2e96b57e2d24 915d ","name":"1stLevelFile.txt","type":"blob","path":"myDirectory/1stLevelFile.txt","mode":"100644"},{"id":"3501682ba833c3e50addab55e42488e98200b323", “名称”:“top_level.txt”,“类型”:“blob”,“路径”:“top_level.txt”,“模式”:“100644”}]

如果我请求内容,top_level.txt它们将通过以下方式毫无问题地返回:

  • myserver.com/api/v4/projects/1/repository/files/top_level.txt?ref=master

但是我无法myDirectory/1stLevelFile.txt通过我尝试的任何 API 调用进行访问。例如:

  • myserver.com/api/v4/projects/1/repository/files/"myDirectory%2F1stLevelFile.txt"?ref=master 和,
  • myserver.com/api/v4/projects/1/repository/files/"myDirectory%2F1stLevelFile%2Etxt"?ref=master

结果是:

未找到 在此服务器上未找到请求的 URL /api/v4/projects/1/repository/files/myDirectory/1stLevelFile.txt。Apache/2.4.25 (Debian) 服务器位于 myserver.com 端口 443


  • myserver.com/api/v4/projects/1/repository/files/"myDirectory/1stLevelFile.txt"?ref=master和,
  • myserver.com/api/v4/projects/1/repository/files?ref=master&path=myDirectory%2F1stLevelFile.txt

结果是:

未找到错误404”

组件的版本是:

GitLab 10.6.3-ee
GitLab Shell 6.0.4
GitLab Workhorse v4.0.0
GitLab API v4
Ruby 2.3.6p384
Rails 4.2.10
postgresql 9.6.8
Run Code Online (Sandbox Code Playgroud)

根据我的研究,有一个类似的错误,已在 10.0.0 更新中修复。

我还添加了我的 ssh-key,尽管我怀疑它有任何效果,遵循此建议在 php 中解决相同的问题。

解决方案: 我最终通过调整服务器上安装的apache解决了。只需按照以下说明操作:https://gitlab.com/gitlab-org/gitlab-ce/issues/35079#note_76374269

小智 3

根据你的代码,我会考虑你使用curl.

如果是这样,为什么要在文件路径中添加双引号?该文档不包含它。

你能这样测试一下吗? curl --request GET --header 'PRIVATE-TOKEN: XXXXXXXXX' myserver.com/api/v4/projects/1/repository/files/myDirectory%2F1stLevelFile%2Etxt?ref=master