# #git #gitlab #mirroring
Вопрос:
При изучении того, как импортировать репозиторий Git через API GitLab в GitLab, мои результаты поиска, похоже, загрязнены методами зеркального отображения репозитория GitHub в GitLab с использованием ssh. Я пытаюсь выполнить эквивалент CLI / Bash перехода к: http://127.0.0.1/projects/new#import_project на собственном сервере GitLab и вводим: http://www.somegit.com/somegituser/somegitrepository.git
, как показано ниже: За исключением использования API GitLab (и личного токена доступа). Итак, я просмотрел документацию GitLab и запустил:
curl --request POST --header "PRIVATE-TOKEN: $personal_access_token" "http://127.0.0.1/api/v4/projects/1/export"
--data "upload[http_method]=PUT"
--data-urlencode "upload[url]=http://www.somegit.com/someuser/somegithubrepository.git"
Который возвращает:
{"message":"202 Accepted"}(base)
Однако репозиторий не отображается на сервере GitLab. Поэтому мне было интересно: как я могу добавить произвольный общедоступный репозиторий git на автономный сервер GitLab, используя метод импорта и API GitLab (без использования ssh для GitLab)?
Комментарии:
1. намеренно ли вы используете
export
api внутри curl вместоimport
api?2. Нет, это было непреднамеренно, я не знал о существовании двух вариантов на момент написания.
Ответ №1:
Есть два способа справиться с этим:
- удаленным является GitHub или Bitbucket
- любой другой удаленный
GitHub или Bitbucket
то, что вы ищете, это Import API
(https://docs.gitlab.com/ee/api/import.html#import-repository-from-github ) по крайней мере, для серверов GitHub и Bitbucket есть собственные запросы, такие как:
curl --request POST
--url "https://gitlab.example.com/api/v4/import/github"
--header "content-type: application/json"
--header "PRIVATE-TOKEN: <your_access_token>"
--data '{
"personal_access_token": "aBc123abC12aBc123abC12abC123 _A/c123",
"repo_id": "12345",
"target_namespace": "group/subgroup",
"new_name": "NEW-NAME",
"github_hostname": "https://github.example.com"
}'
любой другой git
если удаленный сервер не является сервером GitHub или Bitbucket, я могу придумать только один способ:
- создайте проект с помощью API: https://docs.gitlab.com/ee/api/projects.html#create-project
curl --request POST
--url "https://gitlab.example.com/api/v4/import/github"
--header "content-type: application/json"
--header "PRIVATE-TOKEN: <your_access_token>"
--data '{ "path":"<path>", "name": "<name>" }'
- используйте ответ ID на этот запрос, чтобы создать зеркало для извлечения, например: https://docs.gitlab.com/ee/api/remote_mirrors.html#create-a-pull-mirror
curl --request POST --data "url=https://username:token@example.com/gitlab/example.git"
--header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/<ID>/remote_mirrors"
Имейте в виду, что api удаленного pull mirror не поддерживает аутентификацию по SSH, поэтому, если вам нужно обеспечить аутентификацию, вам необходимо использовать https.