Подтвердить что ты не робот

Использование git -flow в многоэтапном развертывании

Нарисовать пробел с завершением моей схемы развертывания. После публикации этого вопроса: Перенос производственного сайта без VCS на Git, у меня есть суть развертывания в локальном репо.

У моего локального сервера разработки есть репозиторий git -flow, на который я могу нажать, и он обновит внешнюю рабочую строку.

У меня есть мое репо, настроенное с помощью git -flow, и вот как выглядит мой источник отдачи:

$ git remote show origin
* remote origin
  Fetch URL: ssh://[email protected]/var/git/dev/repo.git
  Push  URL: ssh://[email protected]/var/git/dev/repo.git
  HEAD branch (remote HEAD is ambiguous, may be one of the following):
    develop
    master
  Remote branches:
    develop tracked
    master  tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local refs configured for 'git push':
    develop pushes to develop (up to date)
    master  pushes to master  (up to date)

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

git push staging #pushes to remote staging repo with a post-receive hook "git checkout develop -f"

git push production #pushes to remote production repo with a post-receive hook "git checkout master -f"

Таким образом, мы можем развиваться локально и продвигаться к нашему маленькому внутреннему серверу развития и иметь всю историю. Затем, когда нам ясно, для постановки/производства, мы просто выталкиваем соответствующие ветки.

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

git push staging develop
git push production master

И вот пульты, соответственно:

$ git remote show staging
* remote staging
  Fetch URL: ssh://[email protected]/var/git/dev/staging.git
  Push  URL: ssh://[email protected]/var/git/dev/staging.git
  HEAD branch: develop
  Remote branch:
    develop tracked
  Local ref configured for 'git push':
    develop pushes to develop (up to date)

$ git remote show production
* remote produdction
  Fetch URL: ssh://[email protected]/var/git/dev/production.git
  Push  URL: ssh://[email protected]/var/git/dev/production.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (up to date)

Итак, теоретически мы можем использовать git -flow внутри, отслеживать ветвь разработки и выталкивать ее для других отделов для просмотра /QA. Затем мы можем сделать свое освобождение внутренне, и нажимаем изменения на этап, а затем просто нажимаем ведущую ветвь на производство.

Я предполагаю, что мой вопрос: я собираюсь сделать это правильно? Я действительно начинаю, когда дело доходит до git и git -flow. Я просмотрел все доступные ресурсы, и это лучшее, что я мог придумать до сих пор.

Было бы полезно оценить любые мнения людей, которые используют git -flow в многоэтапном развертывании.

4b9b3361

Ответ 1

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

Один пост-приемный крюк, чтобы управлять всеми ними. #

Захват сообщения получает просмотр имени:

Если refname = "refs/heads/master" (нажатие на ведущую ветку):

echo "Updating production document root..."
GIT_WORK_TREE=/data/hosts/production/web/ git checkout -f master
echo "Production document root updated"

Затем я использую крюк post-receive-email, который пришел с git, чтобы отправить небольшое небольшое сообщение об фиксации. В настоящее время разрабатываем API для нашего отслеживателя проблем, чтобы мы могли закрыть проблемы с фиксацией и т.д.

То же самое происходит, когда refname = "ref/heads/develop" (нажатие для разработки):

Бонусные очки

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

Вы можете изменить крюк после приема, чтобы искать ссылки refs/heads/(.*?), которые будут срабатывать, если вы сделали что-то вроде git push -u crazy-experimental-long-term-branch

Это позволяет нам создать долгосрочную ветвь проекта, подтолкнуть ее к -u и настроить поддомен автоматически на crazy-experimental-long-term-branch.site.com с помощью некоторых простых сценариев.

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

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

Надеюсь, что это будет полезно.

Ответ 2

Если вы хотите развернуть мастер, вы можете использовать следующий фрагмент:

read oldrev newrev refname
branch=$(git rev-parse --symbolic --abbrev-ref $refname)

if [ "$branch" = "master" ]; then
    echo "Deploying new master"
    GIT_WORK_TREE="$DEPLOYDIR" git checkout -f master
    echo "Finished."
else
echo "  No commit to master. Deploying nothing."
fi