Представим себя на месте разработчиков многолетней давности, которые пишут на PHP и у которых разработка и продакшен находятся на одном сервере. И более того — в продакшен выполняется ровно тот же код, над которым мы работаем.

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

Мы можем сделать две директории — develop и prod, написать скрипт deploy.sh и запускать его при релизе. Наткнувшись на ошибки и потребность в откате, начнём бэкапить текущий продакшен перед релизом новой его версии. После проблем, требующих откатиться к какому-то из прежних состояний, начнём хранить несколько последних бэкапов и придумывать для них систему имён, чтобы не запутаться.

Если у нас есть git, то конечном итоге мы заметим, что эту проблему можно решить с его помощью, разделив процессы разработки и продакшена с помощью веток, а для деплоя используя мёржи и черипики. Ибо git уже умеет многое из того, что мы изобретаем.

Так мы и переизобрели gitflow.

Но обратим внимание на условия, в которых этот подход действительно актуален:

  • Разработка и продакшен находятся на одном сервере и в одной директории.

  • Используется интерпретируемый язык программирования — код выполняется в том виде, в котором написан.

Сегодня разработку и продакшен на одном сервере не держат даже для pet‑проектов. Существуют бесплатные тарифы на GitHub, GitLab и других платформах, которых хватает даже для промышленной разработки.

Если у нас компилируемый язык или разработка и продакшен находятся на разных серверах — у нас нет таких проблем и нет причин их решать. Следовательно, нам не нужен gitflow.

Если мы всё же называем то, что у нас стихийно сложилось именем «gitflow» только на основании того, что у нас есть ветка develop, то у нас есть проблема совсем в другого рода — это проблема нашего непонимания того, что должно вызывать рабочую активность, и поэтому мы делаем «как у всех», а не то, что требуется рабочими обстоятельствами.