Подтвердить что ты не робот

Зеркальное отображение репозитория Gitlab

Возможно ли установить gitlab для автоматической синхронизации (зеркального отображения) репозитория, размещенного в другом месте?

В настоящий момент самый простой способ, которым я знаю это, заключается в том, чтобы вручную перейти к двум (gitlab и другим) репозиториям, но это отнимает много времени и подвержено ошибкам.

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

4b9b3361

Ответ 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).