2014-12-09 3 views
0

У меня есть набор серверов с основами кода на них. позволяют называть их p1, p2, p3. У меня есть сервер разработки, который я использую для хранения кода d1. Каждый p-сервер отличается с другой базой кода.Использование Git с несколькими серверами

Я пытаюсь понять, как правильно управлять git-репо, чтобы каждый из «p» серверов поддерживал «d1» сервер в актуальном состоянии.

вот что я сделал.

  1. Создайте git repo на p1 и начальную фиксацию.
  2. создал -bare клон репо и scp'd его на сервер d1.
  3. Повторяется это для всех серверов.

мой d1 сервер теперь имеет/GIT/папку с подпапок

p1, p2, p3. каждый из них имеет нормальное содержание

HEAD Филиалы конфигурации описание крючки info объекты refs.

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

OK так вот моя проблема.

Как сохранить p1 repo в актуальном состоянии, когда кто-то клонирует копию d1 и связывается с ней.

Нужно ли мне бежать принести мерзавец на p1

или я должен иметь людей изменить p1 и затем GIT толчок d1.

+0

Почему бы вам просто не использовать один и тот же кровавый сервер? Вы хотите, чтобы что-либо подтолкнуло к любому из серверов, чтобы автоматически было перенаправлено всем остальным? Или это односторонняя улица? – psusi

+0

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

+0

Также единственным открытым сервером является d1, на котором p-серверы не предназначены для доступа если это возможно. Я могу решить вопрос, если нужно ... –

ответ

1

вы можете реализовать зеркалирование с gitolite, чтобы центральный сервером со всей последней кодой от других

из http://gitolite.com/gitolite/mirroring.html

Зеркального просто: у вас есть один сервер «мастер» и один или более "подчиненные" серверы. Рабы получают обновления только от мастера; к остальным странам мира они в лучшем случае доступны только для чтения.

На следующих рисунках каждая коробка (A, B, C, ...) является репо. Главный сервер для репо окрашен в красный цвет, ведомые - зеленым. Пользователь нажимает на репо на главном сервере (красный), а главный сервер - после того, как пользователь нажимает успешное нажатие, затем выполняет git push -mirror для ведомых устройств. Стрелки показывают это зеркальное нажатие.

Первое изображение показывает, какое зеркало гитолита раньше напоминало длинное (ранее v2.1, на самом деле). Существует только один главный сервер; все остальные рабы. Каждое подчиненное зеркало отражает все репозиции, которые несет мастер , не больше и не меньше.

one server as master and many as slaves

Это просто понять и управлять ими, и, возможно, на самом деле хорошо для многих небольших сайтов.Зеркала более "горячего" ожидания чем-нибудь еще.

Но когда у вас есть 4000+ разработчиков на 500 репозиториях, использующих 25 серверов в 9 городах, этот единственный сервер, как правило, становится напряженным. Особенно, если вы понимаете, что многие проекты имеют очень локализованные команды разработки . Например, если большинство разработчиков для проекта в городе X, с, возможно, несколько в городе Y, то с главного сервера в городе Z является ... неоптимальным :-)

И так, в течение приблизительно 3 лет, gitolite могли бы сделать это:

master repos and slaves on different servers

Вы можете легко увидеть различия в этом сценарии, но вот более полное описание того, что gitolite можно сделать:

Разные мастера и наборы рабов для разных РЕПО.

Это позволяет делать такие вещи, как:

использовать сервер ближе к большинству своих разработчиков как мастера для что Repo. Отразить репо только на некоторых серверах. Имеют репозиции, что являются исключительно локальными для сервера (не отражены вообще). Нажимайте на подчиненное устройство по требованию или через cron (помогает справиться с пропускной способностью или связностью ограничений). Все это возможно, отражается ли зеркало gitolite-admin - то есть все серверы имеют то же самое gitolite-admin repo или нет.

Толкается к подчиненному устройству, которое можно трансформировать в реальный мастер.

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

Смежные вопросы