У нас есть единый репозиторий git на тестовом сервере (назовем его test1). Репозиторий очень прост, просто не нужно осваивать веток или чего-то особенного. Цель этого репо - отслеживать изменения в / etc / puppet и всех его подпапках. Обычно он чистый и синхронизируется с головой.
Теперь мы хотим скопировать все в test1: / etc / puppet на рабочий сервер (назовем его prod1), сохраняя при этом правильный рабочий процесс git между двумя машинами. Когда изменения в test1 готовы к производству, мы хотим использовать git, чтобы протолкнуть их с test1 на prod1. Цель здесь - иметь возможность быстро отменить изменения на prod1, если что-то сломается.
Вот что у меня есть:
Что ты думаешь? Должны ли мы продолжать использовать одну главную ветвь или нам нужно создать новую ветку devel? Если мы создадим ветку devel, как мы будем использовать ее с недавно созданным голым репо?
Если я резюмирую ваш запрос, то, что вы хотите, - это иметь архитектуру с 1 сервером git, который получает все нажатия от пользователей и автоматические нажатия на prod, когда он будет готов.
Именно это и делается с архитектурой, основанной, например, на системе обзора gerrit. Рабочий процесс выглядит следующим образом:
Итак, хороший момент здесь в том, что никто (при правильной настройке) не может перейти к мастеру без минимального обзора и базового тестирования. Итак, вы мастер-ветка из prod (почти) всегда чистая.
Я действительно разобрался с этим сам. После некоторого тестирования я создал промежуточное голое репозиторий git (git init --bare) на test1. Это будет действовать как git-сервер, который будет получать и отправлять коммиты в репозитории test1 + prod1 по желанию.
Для этого я сделал следующее: На машине test1: 1. mkdir /opt/puppet.git 2. cd /opt/puppet.git 3. git init --bare 4. cd / etc / puppet (где находится текущий репозиторий git с реальным кодом) 5. useradd git && passwd git (чтобы разрешить push / pull с удаленных хостов) 6. git remote add origin git @ test1: /opt/puppet.git 7. git push origin - все теперь у меня весь мой код хранится в голом репо в / opt / puppet.git На prod1 1. cd / etc 2. git clone git @ test1: /opt/puppet.git 3. Если я хочу получить последние изменения: git pull