Какую Git-стратегию (ветвления) вы использовали на предыдущем проекте?

Ответ

Мы применяли адаптированную версию Git Flow с долгоживущими ветками для разных этапов разработки.

Основные ветки:

  1. main / master — стабильная ветка, соответствующая продакшену. Код только через мерж-реквесты.
  2. develop — ветка для интеграции новых функций. Основная ветка для разработки.
  3. *`feature/** — короткоживущие ветки для разработки новой функциональности. Ответвляются отdevelop`.
  4. *`release/** — ветки для подготовки релиза (финальное тестирование, исправление багов). Ответвляются отdevelop`.
  5. *`hotfix/** — ветки для срочных исправлений в продакшене. Ответвляются отmain`.

Типичный workflow для новой функции:

# Создание ветки для задачи
git checkout develop
git pull origin develop
git checkout -b feature/JIRA-123-new-login-button

# После завершения разработки и тестов
git push origin feature/JIRA-123-new-login-button
# Далее создается Pull/Merge Request из feature/* в develop

Для хотфикса:

git checkout main
git pull origin main
git checkout -b hotfix/critical-payment-fix
# Исправление бага, тесты
git push origin hotfix/critical-payment-fix
# MR в main, затем обязательный мерж в develop

Эта стратегия обеспечивала стабильность main и контролируемый поток изменений.

Ответ 18+ 🔞

А, вот эта ваша хуйня с гитом, про которую все так пиздят! Мы тоже в своё время на эту удочку попались, блядь. Использовали такую адаптированную версию Git Flow, ну, с этими ебучьми долгоживущими ветками для всяких этапов. Вроде как строго и по науке, а на деле — иногда такой бюрократический пиздец, что волосы дыбом, но в целом, если команда не из распиздяев, то работает.

Вот наши главные ветки, на которых всё держалось:

  1. main / master — это, блядь, священная корова. Там код, который уже на проде и не дохнет (в идеале). Туда можно только через мерж-реквест, и чтобы у тебя уже все тесты прошли и три старших товарища подписались, иначе — иди нахуй.
  2. develop — тут уже веселее, тут весь сырой, горячий, только что из-под пальцев код. Сюда стекается вся новая функциональность, тут ад интеграции, но это сердце разработки.
  3. *`feature/** — это как личный песочник для каждой фичи. Хочешь новую кнопку — отпочкуйся отdevelop` и ваяй, пока начальство не пришло с криками "где результат, блядь?". Короткоживущие, чтоб не превращались в отдельную вселенную.
  4. *`release/** — а вот это уже нервотрёпка. Когда вdevelop` накопилось дохуя всего и надо готовить релиз. Ответвляешься, финализируешь, тестируешь, баги чинишь, ищешь виноватых — стандартный набор.
  5. *`hotfix/** — мой любимый, ёпта. Когда на проде всё горит синим пламенем и клиенты орут. Ты, блядь, с утра пораньше, ещё с похмелья, отпочковываешься прямо отmain`, быстренько латаешь дыру и пушишь, как угорелый. Спасение утопающих — дело рук самих утопающих.

Ну и как это примерно выглядело в жизни, когда надо было фичу запилить:

# Приходишь с утра, кофе ещё не пил
git checkout develop
git pull origin develop # чтобы не было потом "ой, у меня конфликты, бля"
git checkout -b feature/JIRA-123-new-login-button # и понеслась

# ... Проходит N часов/дней, фича готова, локально всё работает (надеюсь)
git push origin feature/JIRA-123-new-login-button
# А дальше самое интересное — создаёшь Pull/Merge Request из своей feature/* в develop и начинаешь молиться, чтобы ревьюверы не нашли, за что зацепиться.

А вот если пиздец на проде и надо хотфикс:

# Понимаешь, что день уже не задался
git checkout main
git pull origin main # очень важно, блядь, не забыть!
git checkout -b hotfix/critical-payment-fix # название говорит само за себя
# Тут ты в режиме ниндзя исправляешь одну строчку, которая всё ломала
git push origin hotfix/critical-payment-fix
# MR в main делается в три раза быстрее, потому что всем похуй на процесс, лишь бы продакшен не лёг. И ОБЯЗАТЕЛЬНО потом этот фикс назад в develop мержишь, а то потом вылезет, как хитрая жопа, через полгода.

В общем, стратегия такая, да. Сохраняет main в относительной чистоте и даёт хоть какую-то иллюзию контроля над этим потоком изменений. А так-то, конечно, всё упирается в то, чтобы люди не были мудаками и делали всё по уму, а не абы как.