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

147

У меня есть учетная запись установки Gitlab, где я создал репозиторий "ffki-startseite"

Теперь я хочу клонировать репозиторий git://freifunk.in-kiel.de/ffki-startseite.gitв этот репозиторий со всеми коммитами и ветвями, чтобы я мог начать работать над ним в своей области видимости.

Как я могу импортировать это?

rubo77
источник
3
Новая функция gitlab, создайте проект и затем перейдите на страницу проекта. Здесь вы увидите основные инструкции.
Мартейн ван
Возможный дубликат Gitlab хранилища зеркалирования
кельвин
Основные инструкции отсутствуют в более новых версиях Gitlab. Может кто-нибудь, кто их скопировал, скопировать их сюда?
jdevora

Ответы:

156

Я смог полностью экспортировать свой проект вместе со всеми коммитами , ветками и тегами в gitlab с помощью следующих команд, запущенных локально на моем компьютере:

Чтобы проиллюстрировать мой пример, я буду использовать https://github.com/raveren/kint в качестве исходного хранилища, которое я хочу импортировать в gitlab. Я заранее создал пустой проект с именем Kint(в пространстве имен raveren) в gitlab, и он сказал мне, что http git url недавно созданного проекта есть http://gitlab.example.com/raveren/kint.git

Команды не зависят от ОС.

В новом каталоге:

git clone --mirror https://github.com/raveren/kint
cd kint.git
git remote add gitlab http://gitlab.example.com/raveren/kint.git
git push gitlab --mirror

Теперь, если у вас есть локально клонированный репозиторий, который вы хотите продолжать использовать с новым пультом, просто выполните следующие команды * там:

git remote remove origin
git remote add origin http://gitlab.example.com/raveren/kint.git
git fetch --all

* Это предполагает, что вы не переименовали ваш удаленный мастер origin, иначе измените первые две строки, чтобы отразить его.

raveren
источник
1
Это дает мне ошибку: remote: GitLab: Вы не можете принудительно принудительно вставить push-код в защищенную ветку в этом проекте. На 10.0.100.89:8496/project/james-project.git ! [удаленный отклонен] мастер -> мастер (отказ от предварительного приема)
Джеймс Хиршорн
4
Мне пришлось отключить защищенные ветки в Настройки -> Репозиторий, чтобы заставить это работать.
Джеймс Хиршорн
См. Мой вопрос, почему вы должны использовать --mirror
Martijn van Wezel
108

Добавьте новый удаленный gitlab в существующий репозиторий и нажмите:

git remote add gitlab url-to-gitlab-repo
git push gitlab master

источник
Я должен был толкать его с силой, потому что я возился в gitLab уже: git push gitlab master -f. Теперь у меня есть весь репо со всеми коммитами в моем новом GitLab;) спасибо
rubo77
19
Разве вам не нужно делать зеркало? Что делать, если у вас были другие ветви, чем мастер?
slhck
7
да, выполняя действия, предложенные OP, вы теряете все ветви (кроме master) и теги
raveren
Gitlab Project Import загрузит удаленное хранилище с URL-адреса при создании проекта. Включает инструкции по импорту репозиториев SVN.
rickfoosusa
1
мерзавец удаленный добавить gitlab GIT мастера толчка gitlab URL-к-gitlab-репо --mirror
Саурабй
23

Сохранить все теги и ветви

Просто запустите эту команду в existing Git repository

cd existing_repo
git remote rename origin previous-hosts
git remote add gitlab git@git.hutber.com:hutber/kindred.com.git
git push -u gitlab --all
git push -u gitlab --tags
Джейми Хатбер
источник
Не копировать все ветки
Мартин ван Везель
19

Вот шаги, предоставляемые Gitlab:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.example.com/rmishra/demoapp.git
git push -u origin --all
git push -u origin --tags
Раджкаран Мишра
источник
Это только подтолкнет мастера, а не другие ветви
allkenang
18

Это базовое перемещение одного репо в новое место. Я использую эту последовательность все время. С --bare исходные файлы не будут видны.

Откройте Git Bash.
Создайте голый клон репозитория.

git clone --bare https://github.com/exampleuser/old-repository.git

Зеркало-толчок в новый репозиторий.

cd old-repository.git

git push --mirror https://github.com/exampleuser/new-repository.git

Удалите временный локальный репозиторий, созданный на шаге 1.

cd ../
rm -rf old-repository.git

Почему зеркало? Смотрите документацию git: https://git-scm.com/docs/git-push.

- Все Push всех веток (т.е. ссылки под refs / heads /); не может быть использован с другими.

--mirror Вместо того, чтобы называть каждый ref для push, указывает, что все ссылки в refs / (которые включают в себя, но не ограничиваются refs / head /, refs / remotes / и refs / tags /) должны быть отражены в удаленном репозитории. Вновь созданные локальные ссылки будут отправлены на удаленный конец, локально обновленные ссылки будут принудительно обновлены на удаленном конце, а удаленные ссылки будут удалены с удаленного конца. Это значение по умолчанию, если задан параметр конфигурации remote..mirror.

Мартейн ван Визель
источник
Работает также с gitlab!
полотенце
12

rake gitlab: import: repos может быть более подходящим методом для массового импорта:

  • скопируйте пустой репозиторий в repos_path( /home/git/repositories/group/repo.git). Имя каталога должно заканчиваться .gitи находиться в пространстве имен группы или пользователя.
  • бегать bundle exec rake gitlab:import:repos

Владелец будет первым администратором, и группа будет создана, если она еще не существует.

Смотрите также: Как импортировать существующий репозиторий Git в Gitlab?

Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
источник
Для тех, кто может быть сбит с толку, пустой репозиторий - это репозиторий, обычно находящийся в централизованном месте (например, github), который НЕ содержит папку .git в корне репозитория. Это только удобный вариант, если у вас есть доступ к серверу, на котором хранится пустой репозиторий. В противном случае ответ @Raveren является лучшим вариантом.
TinkerTenorSoftwareGuy
4
git clone --mirror git@github.com:username/repo-name.git

git remote add gitlab ssh://git@servername.com/username/repo.git

git push -f --tags gitlab refs/heads/*:refs/heads/*

Лучше сделать это через ssh, https может не работать

kazerm
источник
«https может не сработать», это обычно не так
Мартейн ван Везел
Это на самом деле, поскольку HTTP-соединения могут быть отключены. Спасибо за ответ.
Михей
2

Перемещение проекта из GitHub в GitLab, включая проблемы, запросы на извлечение Wiki, Вехи, Метки, Примечания к выпуску и комментарии

Существует подробная инструкция по GitLab Docs:

https://docs.gitlab.com/ee/user/project/import/github.html

ТЛ; др

  • Убедитесь, что у всех пользователей GitHub, которые вы хотите отобразить на пользователей GitLab, есть:

    • Учетная запись GitLab, вошедшая в систему с помощью значка GitHub - или -
    • Учетная запись GitLab с адресом электронной почты, который совпадает с общедоступным адресом электронной почты пользователя GitHub.
  • На верхней панели навигации нажмите + и выберите Новый проект.

  • Выберите вкладку «Импорт проекта», а затем выберите GitHub.
  • Выберите первую кнопку для перечисления ваших репозиториев GitHub. Вы будете перенаправлены на страницу github.com для авторизации приложения GitLab.
  • Нажмите Авторизовать gitlabhq. Вы будете перенаправлены обратно на страницу импорта GitLab, и все ваши репозитории GitHub будут перечислены.
  • Перейдите к выбору репозиториев для импорта.

Но, пожалуйста, прочитайте страницу GitLab Docs для деталей и хуков!

(это не много)

rubo77
источник
1

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

Лучшее решение - использовать инструмент создания / импорта, не забудьте указать свое имя пользователя и пароль, иначе он вообще ничего не импортирует.

Следуй за моими скриншотами

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

JBarros35
источник