Git репликация на нескольких живых серверах - PullRequest
4 голосов
/ 30 сентября 2011

У меня вопрос по репликации репозитория git на нескольких живых http-серверах

Моей целью было создать репликацию с моего тестового сервера на работающие http-серверы. Поэтому, когда я фиксирую свои изменения в тесте, эти изменения должны автоматически появляться и на сервере. Я посмотрел на gerrit2, и он выглядит нормально, но я попытался сделать это с помощью git, но так как git использует ловушку post-commit, я уверен, что смогу сделать это с этим

Итак, я попытался сделать несколько нажатий в хуке после коммита (поскольку перезапись кажется единственным вариантом, потому что при слиянии есть вероятность конфликтов, и последнее, что я хочу иметь на своем живом сервере, это испорченные файлы ... .) от теста к жизни, и сначала я получил несколько странных ошибок, но затем я добавил параметр силы, и push завершился успешно, но, к сожалению, изменения не появились на удаленном сервере. Я использовал протокол ssh для обмена данными.

Как это сделать, чтобы было хорошо и надежно? Какой набор команд я должен выполнить?

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

Как указывает @Jefromi, толкать не стоит.

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

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

0 голосов
/ 29 октября 2011

В качестве альтернативы вы можете настроить пустое репо (git init --bare) и использовать хук для получения поста, чтобы проверить его и скопировать в опубликованный каталог (hooks/post-receive)

GIT_REPO=$HOME/blah
TMP_GIT_CLONE=$HOME/tmp/tmpblah
PUBLIC_WWW=/srv/public_folder/

git clone $GIT_REPO $TMP_GIT_CLONE
mv $TMP_GIT_CLONE $PUBLIC_WWW
exit

Вот как яуправлять сайтами на моем сервере. Я нажимаю и на свое хранилище кода (настройка gitosis), и на хранилище, которое проверяет и развертывает изменения в рабочей среде.Сценарий и развертывание в новую папку каждый раз и просто обновите символическую ссылку, чтобы указать на нее

, чтобы push сегодня перешел на 2011102900 рядом с и т.д., и символическая ссылка будет связывать текущий с любой новой папкой (обновляется скриптом post_receive)

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