Зеркальное отображение репозитория Gitlab
Возможно ли установить gitlab для автоматической синхронизации (зеркального отображения) репозитория, размещенного в другом месте?
В настоящий момент самый простой способ, которым я знаю это, заключается в том, чтобы вручную перейти к двум (gitlab и другим) репозиториям, но это отнимает много времени и подвержено ошибкам.
Самая большая проблема заключается в том, что зеркало может повторно синхронизировать, так как два пользователя одновременно вносят изменения в два разных хранилища. Лучший способ, который я могу решить, чтобы предотвратить эту проблему, заключается в том, чтобы пользователи могли только нажать на один из репозиториев.
Ответы
Ответ 1
Обновление декабрь 2016: Зеркалирование поддерживается с помощью GitLAb EE 8.2+: см. "" Репликация хранилища".
Как прокомментировал Xiaodong Qi:
Этот ответ можно упростить без использования каких-либо команд (просто установите его в интерфейсе управления репликами Gitlab)
Оригинальный ответ (январь 2013 г.)
Если ваше удаленное зеркальное репо представляет собой голый репо, то вы можете добавить крюк post-receive к вашему репозиторию, управляемому gitlab, и нажмите на свое дистанционное репо.
#!/bin/bash
git push --mirror [email protected]:/path/to/repo.git
Как Гитолит (используется Gitlab) упоминает:
если вы хотите установить крючок только в нескольких конкретных репозиториях, сделайте это непосредственно на сервере.
который находится в:
~git/repositories/yourRepo.git/hook/post-receive
Предостережение (обновление Ocotober 2014)
Циро Сантилли указывает в комментариях:
Сегодня (Q4 2014) это не сработает, потому что GitLab автоматически связывает github.com/gitlabhq/gitlab-shell/tree/... в каждом репозитории, которым он управляет.
Поэтому, если вы сделаете это изменение, каждый измененный вами репозиторий попытается нажать.
Не говоря уже о возможных конфликтах при обновлении gitlab-shell
и что текущий script является ruby script, а не bash (и вы не должны его удалять!).
Вы можете исправить это, прочитав текущее имя каталога и обеспечив биекцию между этим и удаленным, но я рекомендую людям оставаться далеко от этих вещей.
Смотрите (и проголосуйте за) feeadback " Автоматическое нажатие на удаленное зеркальное репо после нажатия на GitLab Repo" .
Обновление июля 2016 года. Я вижу такую функцию, добавленную для GitLab EE (Enterprise Edition): MR 249
- Добавить возможность ввода удаленного URL-адреса в настройках репозитория зеркального отображения
- Добавить код реализации для перехода в удаленный репозиторий
- Добавить нового фонового работника
- Показывать последние даты обновления и ошибки синхронизации, если они существуют.
- Синхронизировать удаленное зеркало каждый час.
Обратите внимание, что последние Remote Mirror Repository
(проблемы 17940) могут быть сложными:
В настоящее время я пытаюсь сместить основную разработку модулей npm с открытым исходным кодом моей компании Lossless GmbH (https://www.npmjs.com/~lossless) от GitHub.com to GitLab.com
Я импортирую все репозитории из GitHub, однако, когда я пытаюсь отключить Mirror Repository
и включить Remote Mirror Repository
с исходным URL-адресом GitHub, я получаю сообщение об ошибке:
Remote mirrors url is already in use
Ниже приведено одно из репозиций: https://gitlab.com/pushrocks/npmts
Отредактировано 2 месяца назад
он просто требует нескольких шагов:
- отключить зеркальный репозиторий
- нажмите Сохранить
- удалить URl
- нажмите Сохранить
- затем добавьте удаленное зеркало
Ответ 2
Если вы не разместили свой собственный GitLab, стоит знать, что GitLab.com внедрил эту функцию напрямую, без каких-либо обходных решений.
- В рамках проекта используйте значок шестеренки, чтобы выбрать Репозиторий зеркал
- Прокрутите вниз до Нажмите в удаленный репозиторий
- Checkmark Резервное хранилище удаленных зеркал: автоматически обновляет ветки удаленных зеркал, теги и каждый день фиксируется в этом репозитории.
- Введите репозиторий, который вы хотите обновить; для GitHub по крайней мере вы можете указать свое имя пользователя и пароль в URL-адресе, например:
https://yourgithubusername:[email protected]/agaric/guts_discuss_resource.git
Обратите внимание, что если вы вытаскиваете из удаленного репозитория, он все равно будет нажимать на удаленный репозиторий, установленный здесь. Я не пробовал, но вы должны быть в состоянии нажать и вытащить из одного репозитория.
Ответ 3
Я также создал проект для зеркалирования репозиториев в GitLab 6 через API (API, используемый в основном для создания проекта).
https://github.com/sag47/gitlab-mirrors
Ответ 4
Лучший вариант сегодня - использовать GitLab CI. Это, по сути, уже реализованный сервер для webhooks, который автоматически клонирует вас и позволяет запускать произвольные команды оболочки: все, что вам нужно сделать, это нажать.
services - лучший вариант, если кто-то их реализует: они живут в исходном дереве, будут делать одно нажатие и требуют никаких дополнительных накладных расходов на развертывание.
Ключевая проблема реализации теперь заключается в том, как безопасно хранить учетные данные push: вероятно, лучшим вариантом для GitHub является получение ключа каким-то образом (Oauth в пользовательском интерфейсе через службу будет идеально) и сохранить этот открытый текст.
Еще одна добавленная опция: пользовательские перехватчики.
Ответ 5
Вы можете использовать hooks для настройки script, который запускается после некоторого фиксации. С этим вы можете отправлять новые изменения в другой репозиторий. Найдите дополнительную информацию о hook на следующей странице: http://git-scm.com/book/en/Customizing-Git-Git-Hooks
Ответ 6
Лучшим вариантом является не использование перехватов после приема, а команды развертывания, которые выполняют синхронизацию через rsync, используя Capistrano, если вам нравится Ruby, используя Shipit, если вы предпочитаете Javascript (Grunt).
Ответ 7
GitLab Enterprise Edition теперь поддерживает зеркалирование репозитория с версии 8.2. Информация о том, как настроить это, находится в разделе справки по зеркалированию репозитория.