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

94

Предположим, я хочу внести исправление в чужой проект. Этот проект находится на 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?

Цимлман
источник

Ответы:

124

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

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

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

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

git pull upstream master

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

git push origin master

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

Крис Уоттс
источник
15
Я просто хотел бы дополнить этот ответ, почему это правильный подход. «Разветвление» - это концепция, созданная GitHub, поэтому существует только на GitHub, тем не менее, полезная. Если вы рассматриваете чистый git (например, чистый git-сервер, работающий где-то в вашей сети), это будет похоже на клонирование репо на ваш собственный сервер, а затем клонирование его на локальный компьютер. Тогда вы должны добавить исходное репо в качестве восходящего локально. Я считаю, что GitHub делает это за кулисами.
Бруно Фингер
9
Просто хочу добавить, что разветвление действительно существует в GitLab, например, см. Здесь .
Bellackn
1
Мне пришлось использовать: pull upstream master --allow-unrelated-
stories
Как отправить запрос на перенос позже?
Эрик Аронести
1
@ErikAronesty Это сложнее, так как "Pull Requests" - это не git, а GitHub. Однако один из способов сделать это - создать копию на GitHub и, скажем, добавить свое разветвленное репо в качестве другого удаленного git remote add upstream-fork git@github.com:myuser/repo. Тогда остается лишь git push upstream-fork masterотправить запрос на перенос через сайт GitHub.
Крис Уоттс,
17

Только в браузере:

  1. Создайте новый проект в Gitlab (подойдет только пустой проект с именем)
  2. Зайдите в Настройки -> Репозиторий.
  3. Введите URL-адрес GitHub в разделе «Зеркалирование репозиториев».
  4. Убедитесь, что для параметра "Направление зеркала" установлено значение "Притягивание".
  5. Нажмите кнопку «Зеркало репозитория»
  6. Нажмите значок синхронизации рядом с появившейся записью
акш1618
источник
У меня нет лицензии Enterprise Edition, т.е. я не вижу «Зеркальное отображение репозиториев» с шага 3. В любом случае, если бы у меня была такая лицензия, мог бы я создать зеркало репозитория GitHub другого лица?
Cimlman
1
@Cimlman Это странно, потому что у меня тоже бесплатная лицензия. Может перепроверить? Должен быть третьим в «Настройки-> Репозиторий». Для ясности: настройки на боковой панели, а не в меню профиля.
aksh1618
Нажав «Настройки» -> «Репозиторий» на боковой панели, я вижу разделы «Защищенные ветки», «Защищенные теги», «Развертывание ключей», «Развертывание токенов».
Cimlman
2
@Cimlman Вы используете собственный / локальный экземпляр gitlab? У меня есть гораздо больше возможностей в моей личной базовой учетной записи на gitlab.com
aksh1618
1
Мы используем самоуправляемую установку версии 10.7.2. Последний выпуск - 11.6. Хорошо, это хороший момент. :) Я не могу попробовать ваше решение на нашем GitLab. Во всяком случае, теперь проблема для меня устарела. Все дело в нашем собственном исправлении ошибок сторонней библиотеки. Однако исправление ошибки уже включено в официальный выпуск этой библиотеки.
Cimlman
0

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

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

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

Дайти
источник
2
Для импорта проекта требуется «токен личного доступа». Я попытался создать его на GitHub. Похоже, эта функция полезна, когда я хочу создать проект на GitLab из моего проекта на GitHub. Верно ли это предположение? Речь идет о разветвлении чужого проекта GitHub.
Cimlman
2
-1, потому что, как указано в предыдущем комментарии, вопрос заключается в разветвлении чужого проекта на github. Инструкции в этом ответе не будут работать в таком случае.
Никос Александрис
1
@NikosAlexandris ты уверен? Разве вы не можете создать токен доступа для своей учетной записи и получить доступ к чужому репо, к которому у вас есть доступ для чтения? (например, каждое публичное репо)
DGoiko
0

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

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

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

Koceka
источник
1
ОК. И если новые коммиты добавляются в исходный репозиторий на GitHub, могу ли я просто объединить изменения в репозиторий на GitHub? Это сложная операция, и, возможно, ее невозможно выполнить без промежуточного репозитория (см. Последний абзац вопроса).
Цимлман