it-roy-ru.com

Gitlab хранилище зеркалирования

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

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

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

48
goncalopp

Обновление от декабря 2016 г .: Зеркальное отображение поддерживается GitLAb EE 8.2+: см. « Зеркальное отображение репозитория ».

Как прокомментировал Xiaodong Qi :

Этот ответ может быть упрощен без использования каких-либо командных строк (просто установите его в интерфейсе управления репо Gitlab)


Оригинальный ответ (январь 2013 г.)

Если ваше удаленное зеркальное репо является bare repo , то вы можете добавить хук после получения к своему репозиторию, управляемому gitlab, и нажать на него в своем удаленном репо.

#!/bin/bash
git Push --mirror [email protected]:/path/to/repo.git

Как Gitolite (используется Gitlab) упоминает :

если вы хотите установить ловушку только в нескольких определенных репозиториях, сделайте это прямо на сервере.

который будет в:

~git/repositories/yourRepo.git/hook/post-receive

Предостережение (Обновление Ocotober 2014)

Сиро Сантилли указывает на в комментариях :

Сегодня (4 квартал 2014 г.) это не удастся, потому что GitLab автоматически вставляет символические ссылки github.com/gitlabhq/gitlab-Shell/tree/… в каждый управляемый им репозиторий.
Поэтому, если вы сделаете это изменение, каждый измененный вами репозиторий будет пытаться нажать Push.
Не говоря уже о возможных конфликтах при обновлении gitlab-Shell, а также о том, что текущий скрипт является скриптом Ruby, а не bash (и вы не должны его удалять!). 

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

Смотрите (и голосуйте за) feeadback "Автоматический перевод на удаленное зеркальное репо после Push на GitLab Repo" .


Обновление июль 2016: я вижу, что эта функция добавлена ​​для GitLab EE (Enterprise Edition): MR 249

  • Добавить возможность ввода удаленного Push URL в настройках зеркального репозитория
  • Добавить код реализации для Push в удаленный репозиторий
  • Добавить новый фоновый работник
  • Показать дату последнего обновления и синхронизировать ошибки, если они существуют.
  • Синхронизация удаленного зеркала каждый час.

Обратите внимание, что недавние Remote Mirror Repository ( проблемы 17940 ) могут быть хитрыми:

В настоящее время я пытаюсь перенести основную разработку модулей с открытым исходным кодом npm моей компании Lossless GmbH ( https://www.npmjs.com/~lossless ) с GitHub.com на GitLab.com

Я импортирую все репозитории из GitHub, однако, когда я пытаюсь отключить Mirror Repository и включить Remote Mirror Repository с исходным URL GitHub, я получаю сообщение об ошибке: 

Remote mirrors url is already in use

Вот один из репозиториев, с которым это не получается: https://gitlab.com/pushrocks/npmts Отредактировано 2 месяца назад

оказывается, это просто требует нескольких шагов:

  • отключить зеркальный репозиторий
  • нажмите сохранить
  • удалить URl
  • нажмите сохранить
  • затем добавьте удаленное зеркало
18
VonC

Если у вас нет собственного GitLab, стоит знать, что GitLab.com ввел эту функцию напрямую, без каких-либо обходных путей.

  1. В рамках проекта используйте значок шестеренки, чтобы выбрать Зеркальный репозиторий
  2. Прокрутите вниз до Нажмите для удаленного хранилища
  3. Галочка Удаленное зеркальное хранилище : Автоматически обновляет ветки, теги и коммиты удаленного зеркала из этого хранилища каждый час.
  4. Введите репозиторий, который вы хотите обновить; для GitHub, по крайней мере, вы можете включить свое имя пользователя и пароль в URL, например, так: https://yourgithubusername:[email protected]/agaric/guts_discuss_resource.git

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

8
mlncn

Я также создал проект для зеркального отображения репозиториев в GitLab 6 через API (API в основном используется только при создании проекта).

https://github.com/sag47/gitlab-mirrors

4
Sam Gleske

Краткий обзор настроек mirroring репозиториев с GitLab и GitHub


  1. GitHub: настройки> настройки разработчика> токены личного доступа
    • Вам необходимо включить: public_repo
  2. GitLab: проект GitLab> Настройки> Репозиторий> Зеркальное отображение репозиториев


От себя

  • Git URL хранилища: https://[email protected]/username/repo.git
  • Зеркальное направление: Push
  • Метод аутентификации: Password
    • Пароль: your_token


Тянуть

  • Git URL хранилища: https://github.com/username/repo.git
  • Зеркальное направление: Pull
  • Метод аутентификации: leave_empty


Официальная документация GitLab

3
Breith

Наилучшим вариантом сегодня является использование GitLab CI. По сути, это уже реализованный сервер для веб-крючков, который автоматически клонирует вас и позволяет запускать произвольные команды оболочки: все, что вам нужно сделать, - это нажать.

сервисы являются наилучшим вариантом, если кто-то их реализует: они живут в дереве исходных текстов, выполняют один Push и не требуют дополнительных затрат на развертывание.

Ключевая трудность реализации сейчас заключается в том, как безопасно хранить учетные данные Push: вероятно, лучший вариант для GitHub - это как-то получить ключ (Oauth для пользовательского интерфейса через службу будет идеальным) и сохранить этот открытый текст.

Еще одна опция, которая была только что добавлена, это пользовательские хуки .

Вы можете использовать хуки, чтобы настроить скрипт, который запускается после некоторого коммита. После этого вы можете отправить новые изменения в другой репозиторий. Ищите дополнительную информацию о крючке на следующей странице: http://git-scm.com/book/en/Customizing-Git-Git-Hooks

1
William Seiti Mizuta

GitLab Enterprise Edition теперь поддерживает зеркалирование репозитория начиная с версии 8.2. Информация о том, как это настроить, находится в разделе справки Зеркалирование репозитория .

0
Scott Willeke

Наилучшим вариантом является не использование перехватов после получения, а развертывание команд, которые выполняют синхронизацию через rsync, с использованием Capistrano , если вам нравится Ruby, с использованием Shipit , если вы предпочитаете Javascript (Grunt).

0
KouiK