Как создать новый репозиторий gitlab из существующего локального репозитория git с использованием CLI?

У меня есть много локальных репозиториев git на моем OSX. Используя командную строку, я хочу создать новые репозитории gitlab на https://gitlab.ccompanyname.com, сформировать существующие локальные репозитории.

Можно ли это сделать?

Ответы

Ответ 1

Создайте новые пустые проекты в GitLab для каждого из ваших локальных репозиториев, которые вы хотите нажать на GitLab. После создания проекта вы попадете на страницу проекта по умолчанию.

Затем cd в каждый из существующих репозиториев git. Сделайте git remote add origin <your new gitlab repo address>

И затем a git push -u origin master

Вам нужно будет сделать это для каждого вашего репозитория, который вы хотите добавить.

Ваш адрес репо дается вам на странице проекта. Как http и/или ssh. Если на вашем локальном компьютере уже есть источник с именем "origin", вы можете сначала его переименовать. Или вы можете назвать gitlab чем-то другим. Кроме того, если вы хотите нажимать все ветки на gitlab, вы можете сделать git push --all origin Если вы хотите использовать теги, git push --tags origin

Ответ 2

Решение 2018 года: просто используйте --set-upstream

Предполагая, что вы позаботитесь о написании сценария, который будет выполнять следующие действия для каждого локального репо, кажется, что с Gitlab 10.5 вы можете просто использовать

git push --set-upstream address/your-project.git

Это создаст новый проект на Gitlab, не создавая его вручную на сервере.


Из документации

Нажмите, чтобы создать новый проект

Когда вы создаете новое хранилище локально, вместо того, чтобы идти в GitLab, чтобы вручную создать новый проект, а затем отправлять хранилище, вы можете напрямую передать его в GitLab, чтобы создать новый проект, и все это, не выходя из терминала. Если у вас есть доступ к этому пространству имен, мы автоматически создадим новый проект под этим пространством имен GitLab с его видимостью, установленной по умолчанию как Private (вы можете позже изменить его в настройках проекта).

Это можно сделать с помощью SSH или HTTP:

## Git push using SSH
git push --set-upstream [email protected]:namespace/nonexistent-project.git master

## Git push using HTTP
git push --set-upstream https://gitlab.example.com/namespace/nonexistent-project.git master

После успешного завершения отправки удаленное сообщение укажет команду для установки удаленного и URL-адрес нового проекта:

remote:
remote: The private project namespace/nonexistent-project was created.
remote:
remote: To configure the remote, run:
remote:   git remote add origin https://gitlab.example.com/namespace/nonexistent-project.git
remote:
remote: To view the project, visit:
remote:   https://gitlab.example.com/namespace/nonexistent-project
remote:

Ответ 3

Я должен согласиться с вами, что документация для обложек API-интерфейсов Gitlab сторонних приложений не идеальна, однако мне удалось сделать одну из они работают.

Для этого я настроил gitlab-сервер sandbox (GitLab Community Edition 8.0.5) в бродячем поле Ubuntu 14.04.

Теперь обертка API, которую я использовал, this one (python-gitlab от Gauvain Pocentek). Я выбрал это, потому что его хватало достаточно людей (118 на момент написания) и написано на питоне, поэтому переносимость не будет проблемой (мой хост-компьютер - это Windows с cygwin, но я буду использовать синтаксис unix для этого ответа).

Установка с помощью pip довольно проста:

$ sudo pip install python-gitlab

После установки вам придется изменить конфигурационный файл, который не существует из коробки или, по крайней мере, я не смог его найти (документация не была ясна об этом). Это официальное имя файла .python-gitlab.cfg, и это тот, который по умолчанию выполняет поиск config.py.

В любом случае, я создал свою собственную версию .python-gitlab.cfg на основе синтаксиса образца, найденного в проекте github, который выглядит следующим образом:

[global]
# required setting
default = local
# optional settings
ssl_verify = false
timeout = 5

[local]
# url = http://10.0.3.2:8080
# get the private token from the gitlab web interface
# private_token = vTbFeqJYCY3sibBP7BZM

[remote]
url = YOUR SERVER URL GOES HERE
private_token = YOUR PRIVATE TOKEN GOES HERE
ssl_verify = false

[remote-ssl]
url = YOUR HTTPS URL GOES HERE (eg https://gitlab.ccompanyname.com))
private_token = YOUR PRIVATE TOKEN GOES HERE
ssl_verify = true (VALID CERTIFICATE) OR false (SELF-SIGNED CERTIFICATE)

Вам нужно будет получить собственный токен из веб-интерфейса (найденный в настройках профиля:: Учетная запись), так как, как указывает README,

Поддерживается только приватная аутентификация по токену (не пользователь/пароль).


После этого позаботится создание проекта, для http:

$ gitlab -c "PATH/TO/YOUR/.python-gitlab.cfg" --gitlab remote project create --name YOUR_PROJECT_NAME

и как это для https:

$ gitlab -c "PATH/TO/YOUR/.python-gitlab.cfg" --gitlab remote-ssl project create --name YOUR_PROJECT_NAME

Переключатели, используемые выше, можно найти, обратившись к справке:

$ gitlab --help

Теперь, предполагая, что вы позаботились о SSH-ключах (как локально, так и в веб-интерфейсе), и что вы хотите, чтобы имена репо gitlab были такими же, как каталоги в локальном git, тогда немного bash script, как и следующее, может автоматизировать создание проекта и локальное нажатие репозиториев:

#!/usr/bin/bash

cd 'PATH/TO/YOUR/REPOS/DIRECTORY' # enter your local repos dir here
server="YOUR SERVER" # enter your server URL
user="YOUR USER" # enter your user name
gitlab_cfg="PATH/TO/YOUR/.python-gitlab.cfg" # enter the location of config file
#method="remote" # uncomment for http, comment for https
method="remote-ssl" # uncomment for https, comment for http
for i in $( ls -1 ); do 
    echo
    echo
    echo '>> Creating Project'
    gitlab -c $gitlab_cfg --gitlab $method project create --name $i
    echo '>> Project ' $i 'created'
    echo '>> ------'
    cd $i
    li=$( tr '[A-Z]' '[a-z]' <<< $i) # convert dirname to lowercase, safe with older bashes (<4)
    origin="[email protected]$server:$user/$li.git"
    echo ">> Reassigning origin to : $origin"
    git remote rm origin
    git remote add origin $origin
    git remote -v
    echo '>> Pushing local repo to gitlab'
    git push -u origin master
    echo '>> Done'
    echo
    echo
    cd ..
done
echo
echo 'Operation finished'

Что он делает, это создать проекты gitlab, названные в честь dirnames, найденных во внешнем локальном каталоге git, затем cd в каждом из них, обновляет начало и затем выполняет push.

Здесь стоит упомянуть, что gitlab преобразует репо-URL в нижний регистр, например sampleRepo001 становится sampleRepo001 в URL-репо; поэтому я конвертирую dirnames в нижний регистр в script.

И, наконец, вот пример запуска script:

введите описание изображения здесь

В качестве напоминания, если вы хотите использовать этот script, тщательно протестируйте его перед тем, как подать заявку на фактический производственный сервер.


Обновление. Я добавил дополнительную информацию о том, как обращаться с HTTPS/SSL.

Ответ 4

Если вы используете nodejs или даже просто понимаете его, модуль node-gitlab отлично работает. На самообслуживаемом экземпляре Gitlab я смог создавать проекты и импортировать репозитории из удаленного репозитория (локального сервера git). Процесс должен быть аналогичным для локального репозитория. Вы можете настроить локальный сервер git на своем компьютере и использовать его как import_url для каждого проекта Gitlab.

Или вы можете написать script, который будет использовать API для создания проекта, а затем переместить каждый репозиторий в соответствующий проект.

псевдокод: для каждого репо в каталоге:

  • Использовать API для создания проекта на gitlab.com
  • git удаленное добавление gitlab url-to-gitlab-repo
  • git push gitlab --mirror

Ответ 5

git -repo сделал грязные задания для вас. Он также поддерживает GitLab, GitHub и Bitbucket.

1. Установка

apt-get install python-pip
pip install git-repo

вам может понадобиться pip3, если указанная выше команда не работает.

(optional)
apt-get install python3-pip
pip3 install git-repo

2 Конфигурация

2.1 необходимая конфигурация

git repo config

Инструмент командной строки, шаг за шагом, спросит, хотите ли вы настроить битбакет, github, gitlab account, нажмите "y/n" и имя пользователя/пароль соответственно. Если вы не знаете, что это значит, нажмите "n", чтобы пропустить. Файл конфигурации будет создан в ~/.gitconfig. Возможно, вы захотите изменить его впоследствии.

(необязательно), например, вы можете вручную установить токен в ~/.gitconfig следующим образом:

[gitrepo "gitlab"]
    token = xxxxxxx
[gitrepo "github"]
    token = xxxxxxx

2.2 лучший ярлык

добавьте следующие строки в ~/.gitconfig.

[alias]
hub = repo hub
lab = repo lab

почему?

Потому что теперь вы можете просто использовать shortcut
git lab clone/howto
git hub clone/howto
в будущем.
Примечание: вам нужно authentication клонировать private репозитории

2.3 (необязательно) добавление личных прав справа

cd ~/.ssh

посмотрите, есть ли у вас файл id_rsa.pub. pub означает общедоступный файл, и я рекомендую вам всего copy весь контент и paste на gitlab.com public ssh webpage.
Done.
Вам не следует показывать другим о соответствующем файле id_rsa, который является вашим ключом для доступа к репозиторию gitlab. Другой клиент/компьютер, имеющий id_rsa, с разрешением chmod 600 id_rsa, сможет управлять репозиторием.

если вы не видите id_rsa.pub, вы можете сгенерировать его, используя:

ssh-keygen -t rsa

Нажмите enter, чтобы оставить его по умолчанию. Теперь вы можете видеть id_rsa.pub и id_rsa внутри ~/.ssh. Если вы используете другое имя, отличное от id_rsa, вы должны изменить файл ~/.ssh/config следующим образом:

# private account
Host github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github

3. git -repo Использование

когда вы начинаете новый проект, вы хотите создать новый хранилище, из GitLab, чтобы нажать на:

git lab create <username>/howto

конечно, вы можете удалить, перечислить репозитории или сделать другие вещи.

git lab delete <username>/howto
git lab list <username>
git lab clone <username>/howto
git clone [email protected]:<username>/howto


Практический пример

Предполагая, что вы создали локальный каталог myproject с git, установленным на некоторое время. Теперь вы хотите загрузить в GitLab.

создать удаленное репо в gitlab. Вы увидите имя пользователя /myproject на странице gitlab.

git lab create username/myproject

Предполагая, что в локальном каталоге myproject есть файл .git

cd myproject

свяжите локальный каталог с удаленным репозиторией gitlab.com.

git lab add username/myproject

загрузить каталог myproject на gitlab.com

git push -u gitlab master

сделать