3

我有一个 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":"0e3a2b246ab92abac101d0eb2e96b57e2d24915d ","name":"1stLevelFile.txt","type":"blob","path":"myDirectory/1stLevelFile.txt","mode":"100644"},{"id":"3501682ba833c3e50addab55e42488e98200b323", "name":"top_level.txt","type":"blob","path":"top_level.txt","mode":"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

根据我的研究,10.0.0 更新修复了一个类似的错误。

我还添加了我的 ssh-key,尽管我怀疑它是否有任何效果,遵循这个在 php 中遇到相同问题的建议。

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

4

1 回答 1

2

根据您的代码,我会认为您使用curl.

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

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

于 2018-04-30T10:02:56.337 回答