Разветвление репозитория Git из GitHub в GitLab

Предположим, я хочу внести исправление в чужой проект. Этот проект находится на GitHub.

Я мог бы создать форк на GitHub и внести исправление.

Однако я бы хотел создать свою вилку на GitLab, а не на GitHub.

Это возможно? Как?

Я прочитал эту статью: https://about.gitlab.com/2016/12/01/how-to-keep-your-fork-up-to-date-with-its-origin/

Во всяком случае, я не уверен, что мне делать в моем случае.

  • Должен ли я как-то создать на GitLab форк проекта из GitHub?
  • Или мне создать зеркало на GitLab проекта с GitHub?
  • Или я должен создать зеркало на GitLab, а затем разветвить зеркало?
  • Или мне сделать что-то совсем другое?

Какой правильный подход.

Спасибо.

ОБНОВЛЕНИЕ

Зеркальное отображение репозитория на GitLab, вероятно, не имеет смысла. Я могу создать зеркало моего репозитория GitHub на GitLab, но я не могу создать зеркало другого репозитория.

https://docs.gitlab.com/ee/workflow/repository_mirroring.html

Вот что я сделал до сих пор:

Я клонировал исходный проект GitHub на свой локальный компьютер. Я зафиксировал исправление в новой ветке в моем локальном репозитории. Я создал пустой проект на GitLab. Я установил origin в моем локальном репозитории для этого пустого проекта в GitLab и отправил обе ветки в GitLab. Я установил апстрим в моем локальном репозитории в репозиторий GitHub.

Когда я хочу получить новые коммиты из исходного репозитория GitHub в репозиторий GitLab (т.е. синхронизировать репозитории), я могу сделать это, используя свое локальное репо в качестве промежуточного шага. Однако прямой связи между репо на GitHub и репо на GitLab нет. Мои настройки верны? Есть ли разница, если я сделаю форк на GitHub?


person Cimlman    schedule 21.06.2018    source источник


Ответы (4)


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

Затем добавьте проект GitHub в качестве удаленного «восходящего потока» с помощью:

git remote add upstream https://github.com/user/repo

Теперь вы можете получать и извлекать из восходящего потока, если будут какие-либо изменения. (Вы также можете нажать на него или выполнить слияние, если у вас есть права доступа.)

git pull upstream master

Наконец, вернитесь в свой репозиторий GitLab:

git push origin master

Если вы не хотите вручную извлекать исходные данные из восходящего потока / push-уведомлений, GitLab предлагает возможность зеркалирования в разделе «Настройки» => «Репозиторий» => «Зеркалирование репозиториев».

person Chris Watts    schedule 23.10.2018
comment
Я просто хотел бы дополнить этот ответ, почему это правильный подход. Разветвление - это концепция, созданная GitHub, поэтому она существует только на GitHub, но тем не менее полезна. Если вы рассматриваете чистый git (например, чистый git-сервер, работающий где-то в вашей сети), это будет похоже на клонирование репозитория на ваш собственный сервер, а затем его клонирование на локальный компьютер. Тогда вы бы добавили исходное репо в качестве восходящего локально. Я считаю, что GitHub делает это за кулисами. - person Bruno Finger; 19.03.2019
comment
Просто хочу добавить, что форкинг действительно существует в GitLab, см. здесь например. - person bellackn; 10.07.2019
comment
Мне пришлось использовать: pull upstream master --allow-unrelated-stories - person hmojtaba; 15.10.2019
comment
Как отправить запрос на перенос позже? - person Erik Aronesty; 20.08.2020
comment
@ErikAronesty Это сложнее, поскольку запросы на вытягивание - это не git, а GitHub. Один из способов сделать это - создать копию на GitHub и добавить свое разветвленное репо в качестве другого удаленного, например git remote add upstream-fork [email protected]:myuser/repo. Тогда просто git push upstream-fork master и отправьте запрос на перенос через сайт GitHub. - person Chris Watts; 03.09.2020
comment
@ChrisWatts благодарит за информацию о зеркалировании в GitLab. Я совсем не знал об этом. - person Paloha; 14.05.2021

Способ только в браузере:

  1. Создайте новый проект в Gitlab (подойдет только пустой проект с именем)
  2. Зайдите в Настройки -> Репозиторий.
  3. Введите URL-адрес GitHub в разделе «Зеркалирование репозиториев».
  4. Убедитесь, что для параметра "Направление зеркала" установлено значение "Притягивание".
  5. Нажмите кнопку "Зеркало репозитория"
  6. Нажмите значок синхронизации рядом с появившейся записью.
person aksh1618    schedule 08.01.2019
comment
У меня нет лицензии Enterprise Edition, т.е. я не могу видеть репозитории зеркалирования с шага 3. В любом случае, если бы у меня была такая лицензия, мог бы я создать зеркало репозитория GitHub другого лица? - person Cimlman; 09.01.2019
comment
@Cimlman Это странно, потому что я тоже пользуюсь бесплатной лицензией. Может перепроверить? Должен быть третьим в «Настройки-› Репозиторий ». Для ясности: настройки на боковой панели, а не в меню профиля. - person aksh1618; 09.01.2019
comment
Нажав «Настройки» - ›Репозиторий на боковой панели, я вижу разделы« Защищенные ветки »,« Защищенные теги »,« Развертывание ключей »,« Развертывание токенов ». - person Cimlman; 09.01.2019
comment
@Cimlman Вы используете собственный / локальный экземпляр gitlab? У меня есть еще много возможностей в моей личной базовой учетной записи на gitlab.com - person aksh1618; 09.01.2019
comment
Мы используем самоуправляемую установку версии 10.7.2. Последний выпуск - 11.6. Хорошо, это хороший момент. :) Я не могу попробовать ваше решение на нашем GitLab. Во всяком случае, теперь проблема для меня устарела. Все дело в нашем собственном исправлении ошибок сторонней библиотеки. Однако исправление ошибки уже включено в официальный выпуск этой библиотеки. - person Cimlman; 11.01.2019
comment
Это работает на gitlab.com (спасибо)! Теперь у меня есть частный репозиторий на Gitlab.com, который является зеркалом общедоступного репозитория GitHub. - person ShreevatsaR; 08.06.2019
comment
@Cimlman Я использую GitLab Community Edition 11.9.1 (сообщество = БЕСПЛАТНАЯ версия), и он ДЕЙСТВИТЕЛЬНО разрешает зеркалирование, однако бесплатная версия позволяет только направление PUSH, а не PULL, чего хотел OP. - person DGoiko; 22.01.2020
comment
GitLab.com раньше разрешал PULL, но похоже, что в какой-то момент он остановился, так как теперь он показывает только параметр PUSH, и все мои зеркальные конфигурации исчезли. Придется прибегнуть к работе cron. - person aksh1618; 29.05.2020

Вместо разветвления вы можете импортировать любой общедоступный репозиторий GitHub, используя только веб-интерфейс:

  1. На панели управления GitLab нажмите Новый проект.
  2. Перейдите на вкладку Импорт проекта.
  3. Нажмите кнопку Репо по URL.
  4. Заполните URL-адрес репозитория Git и оставшиеся поля проекта.
  5. Нажмите Создать проект, чтобы начать процесс импорта.
  6. После завершения вы будете перенаправлены на ваш недавно созданный проект.

Недавно использовал эту технику, и она работает в любом публичном репозитории даже без учетной записи GitHub. Источник информации см. На странице GitLab docs.

person koceka    schedule 30.10.2020
comment
OK. И если новые коммиты добавляются в исходный репозиторий на GitHub, могу ли я просто объединить изменения в репозиторий на GitHub? Это сложная операция, и, возможно, ее невозможно выполнить без промежуточного репозитория (см. Последний абзац вопроса). - person Cimlman; 30.10.2020

Возможен форк частного репозитория github.

  1. Нажмите новый проект
  2. Выберите Импорт.
  3. Выберите github
  4. OAuth2 используется для аутентификации и автоматического создания приложения gitlab
  5. Выберите проект для разветвления

^ Я только что сделал это с частным репо на github, успешно импортирован (inc ветки и т. Д.). Импортированный проект автоматически становится приватным;)

person Daithí    schedule 25.08.2018
comment
Для импорта проекта требуется токен личного доступа. Я попытался создать его на GitHub. Кажется, эта функция полезна, когда я хочу создать проект на GitLab из моего проекта на GitHub. Верно ли это предположение? Речь идет о разветвлении чужого проекта на GitHub. - person Cimlman; 06.09.2018
comment
-1, потому что, как указано в предыдущем комментарии, вопрос заключается в разветвлении чужого проекта github. Инструкции в этом ответе не будут работать в таком случае. - person Nikos Alexandris; 17.01.2019
comment
@NikosAlexandris ты уверен? Разве вы не можете создать токен доступа для своей учетной записи и получить доступ к чужому репо, к которому у вас есть доступ для чтения? (например, каждое публичное репо) - person DGoiko; 22.01.2020