Я пытаюсь получить список содержимого репозитория с помощью 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?
Ни ответьте больше, чем доступно в текущих документах, ни приведите конкретные примеры работающего решения.
Хорошо, проблема решена путем выполнения одного или обоих из следующих действий (я не уверен, какой из них решил):
Добавлен ключ SSH
Используется идентификатор проекта, а не NAMESPACE / PROJECTNAME в URL.
Затем с помощью? Path = SUBDIRECTORY&ref_name = master на URL (как в вопросе), все заработало.
Других решений пока нет …