Импортировать репозиторий Git в GitLab с помощью API?

# #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:

Есть два способа справиться с этим:

  1. удаленным является GitHub или Bitbucket
  2. любой другой удаленный

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, я могу придумать только один способ:

  1. создайте проект с помощью 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>" }'
 
  1. используйте ответ 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.