Как получить содержимое подкаталога в репозитории Gitlab с помощью Gitlab API (с PHP curl)

Я пытаюсь получить список содержимого репозитория с помощью 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

(USERNAME% 2FPROJECTNAME с% 2F я обнаружил в другом потоке gitlab. Похоже, что документы имеют в виду идентификатор)

Для пояснения, фрагмент рабочего кода для списка содержимого верхнего уровня:

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

Итак, для доступа к подкаталогу, параметры списка документов API:

Я бы (обязательно) — идентификатор проекта
дорожка (необязательно) — путь внутри хранилища. Используется для получения доступа к подкаталогам
ref_name (необязательно) — имя ветви или тега хранилища или, если не указано, ветка по умолчанию

Исходя из этого, я попробовал каждое из следующего в качестве URL для команды curl_init выше:

$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. Не ошибка, просто пустая строка.


Для справки, существующие проблемы, которые не помогли:

Как получить подпапки и файлы, используя gitlab api

Как получить доступ к файлам исходного кода и спискам каталогов, используя GitLab API?

Ни ответьте больше, чем доступно в текущих документах, ни приведите конкретные примеры работающего решения.

0

Решение

Хорошо, проблема решена путем выполнения одного или обоих из следующих действий (я не уверен, какой из них решил):

  • Добавлен ключ SSH

  • Используется идентификатор проекта, а не NAMESPACE / PROJECTNAME в URL.

Затем с помощью? Path = SUBDIRECTORY&ref_name = master на URL (как в вопросе), все заработало.

0

Другие решения

Других решений пока нет …