GIT-крюк после получения и удаленное хранилище - PullRequest
1 голос
/ 30 июля 2011

В настоящее время я изучаю способ достижения следующего сценария с помощью перехвата GIT после получения.

У меня есть три удаленных репозитория на разных удаленных серверах.

Сервер A, СерверB и Сервер C

Я хочу перенести свою работу на Сервер A, а также использовать ловушку пост-получения на сервере A, чтобы автоматически выполнить GIT-запрос с Серверов B и C, чтобы также обновить свои хранилища нав то же время.

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

Мне было интересно, есть ли кто-нибудь, кто знает, как достичь этого сценария, или у вас есть какие-либо мыслиили опыт в этом.

Ваша помощь будет высоко ценится.

Спасибо Финау

1 Ответ

10 голосов
/ 30 июля 2011

Если я правильно прочитал ваш вопрос, единственная цель Server B и Server C - сделать резервную копию Server A, верно?

В этом случае вам не нужно указывать Server Bи Server C до pull от A, вместо этого нажмите от A до B и C.Таким образом, содержимое вашей ловушки после получения будет

git push --mirror server_b
git push --mirror server_c

при условии, что server_b и server_c являются известными удаленными устройствами на A.См. Документы git push для описания флага --mirror.

Если вы хотите, чтобы B и C стали активной частью, настройте задание cronна git fetch A периодически.


Другой подход заключается в определении удаленного в локальном репо с тремя URL-адресами:

[remote "multi"]
url = server_a/repo.git
url = server_b/repo.git
url = server_c/repo.git

Теперь, когда вы обычно переводите свою работу на A используя git push, просто сделайте

git push --mirror multi

, чтобы подтолкнуть всех ваших местных на A, B и C одновременно.


Другой вопрос: почему вы вообще нажимаете на B и C?Похоже, что вы делаете это только по причинам резервного копирования.Знаете ли вы, что каждое репо (ваша рабочая копия, эта на A, ...) содержит полную историю вашего развития?Это не похоже на SVN, где у вас есть одна центральная история.Git - это DVCS, и каждая рабочая копия имеет полную историю.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...