Посібник для роботи з Git Flow

Посібник для роботи з Git Flow

  • 21 березня
  • читати 10 хв
Володимир Шайтан
Володимир Шайтан Senior Full Stack Developer у UKEESS Software House, Викладач Комп'ютерної школи Hillel.
Максим Полиновський
Максим Полиновський Trainee Front-end Developer

За 9 років у своїй роботі я часто зтикався з проблемою, як краще організувати процеси розробки, щоб вони були зрозумілими для команди й ефективними для продукту. Мені пощастило, адже це завжди викликало у мене інтерес, бо розробка — це не лише про написання коду, а й про вміння правильно ним керувати.

Уявіть, ви працюєте над проєктом із командою, кожен пише код, додає функціональність, виправляє помилки, але в якийсь момент усі ці дії починають заважати одне одному. Без належної структури процеси можуть ставати хаотичними, що призводить до плутанини, конфліктів і втрати часу, і, для клієнтів найголовніше, грошей.

Сьогодні ми розглянемо підхід щодо стандартизації розробки в команді — Git Flow. Це модель розгалуження, запропонована Вінсентом Дріссеном у 2010 році, стала популярною серед команд розробників через її чітку структуру та зручності в управлінні процесами.

Основна стратегія Git Flow — це використання гілок для роботи над проєктом, яка забезпечує команді допомогу в розподілі завдань, спрощує релізи/оновлення і додавання нових функцій у проєкт.

Якщо описувати дуже просто — Git Flow ізолює розробку певних функцій в окремі гілки, що допомагає кожному члену команди працювати незалежно один від одного.

Далі ми розглянемо те, як це працює:

1️⃣ ОСНОВНА ГІЛКА MASTER

Гілка master є стовбуром нашого проєкту, від якого ми йдемо і де у нас зберігається вся історія та хронологія наших стабільних релізів.

Ми локально можемо створити порожню гілку develop і відправити її на сервер GitHub.

2️⃣ ГІЛКА DEVELOP

Від гілки master ми створюємо гілку develop, у якій вестиметься вся розробка та хронологія нашого проєкту з погляду розробки.

Тут у нас є важливий момент: наша гілка develop ніколи не повинна перетинатися з нашим стовбуром master, про це ми поговоримо надалі.

  • Створення гілки develop
git branch develop

*Завантаження гілки на сервер GitHub

git push -u origin develop

Інші ж розробники в команді повинні клонувати основний репозиторій (гілка master) і створити локальну копію гілки develop.

3️⃣ ГІЛКИ FEATURE

Цю гілку ми використовуємо для розробки окремих функцій або змін до проєкту. Feature створюється з гілки develop і після завершення розробки знову повертається в гілку develop.

*Перемикання на гілку develop

git checkout develop
  • Створення гілки feature
git checkout -b feature/назва функції

*Після завершення роботи над функцією ми об'єднуємо гілку feature із гілкою develop.

git checkout develop
git merge feature/назва функції

4️⃣ ПІДГОТОВКА ДО РЕЛІЗУ

Коли весь наш функціонал уже готовий і доданий у гілку develop, ми створюємо гілку release.

Важливий момент! Після створення гілки release уже не можна створювати й оголошувати нові функції, у ній ми можемо виправляти помилки, оновлювати документацію, оптимізувати код без додавання нового функціоналу.

*Перемикання на гілку develop

git checkout develop
  • Створення гілки release
git checkout -b release/V2.1

5️⃣ ОБ'ЄДНАННЯ ГІЛОК

Після тестування, додавання документації, ми переконуємося, що наша версія стабільна, і тільки після цього ми можемо її об'єднати з гілкою master, щоб синхронізувати всі зміни.

*Перемикання на гілку master і злиття release

git checkout master 
git merge release/V2.1

Після цього ми видаляємо нашу гілку release і продовжуємо роботу в develop. Наша команда може далі працювати, поки ми займалися релізом, тому необхідно не просто видалити, а й ще й об'єднати release і develop, щоб ми мали змогу надалі працювати з найактуальнішими даними й функціями.

*Перемикання на гілку develop і злиття release

git checkout develop
git merge release/V2.1

*Видалення гілки release

git branch -D release/V2.1

Чи після цього робота завершується?

Ні, тому що можуть виникати проблеми, які потрібно вирішувати швидко тут і зараз, і для цього ми використовуємо гілку hotfix про яку далі поговоримо.

6️⃣ HOTFIX АБО ВИПРАВЛЕННЯ ПОМИЛОК

Насамперед потрібно розуміти, що гілку hotfix ми створюємо тільки в тому разі, коли наш проєкт було випущено, і у нас вже після виникли проблеми.

Гілка створюється тільки від основної нашої гілки master.

*Перемикання на основну гілку master

git checkout master

*Перемикання на основну гілку master

git checkout master
  • Створення нової гілки hotfix
git checkout -b hotfix

7️⃣ ОБ'ЄДНАННЯ ВСІХ ГІЛОК

Після всіх виправлень ми знову об'єднуємо hotfix з master, після чого видаляємо. Це ми робимо для того, щоб синхронізувати всі виправлення і далі працювати з найактуальнішою версією нашого проєкту.

*Перемикання на гілку master і злиття hotfix

git checkout master 
git merge hotfix

Це перемикає нас на гілку master і зливає зміни з гілки hotfix.

Рекомендація: після злиття (особливо у гілку master) варто переконатися, що все працює коректно, і зробити пуш змін у віддалений репозиторій.

*Перемикання на гілку develop і злиття hotfix

git checkout develop
git merge hotfix

Це перемикає нас на гілку develop і зливає зміни з гілки hotfix.

*Видалення hotfix

git branch -D hotfix

КОРОТКЕ РЕЗЮМУВАННЯ РОБОТИ З GIT FLOW:

  1. Створення гілки develop — робиться для історії розробки.
  2. Створення гілки feature — реалізуємо нові функції (від develop).
  3. Об'єднання feature & develop — після завершення роботи над новими функціями.
  4. Створення гілки release — підготовка до релізу (від develop), об'єднуємо з master & develop тавидаляємо.

Створення гілки hotfix — виправлення помилок після релізу (від master), об'єднуємо її з master & develop і видаляємо!

Тепер коли ми розібралися, як працює Git Flow, ми можемо розглянути його переваги та недоліки.

ПЕРЕВАГИ

  • Чітка структура: кожен етап нашої розробки має свою спеціальну гілку, що спрощує процес розробки й управління.
  • Безпека: наша гілка master завжди містить стабільний код.
  • Легкість у виправленні помилок: гілка hotfix дає змогу безпечно і швидко розв'язувати проблеми після релізу.
  • Гнучкість: ізоляція розробки, що дозволяє працювати членам команди незалежно один від одного.

НЕДОЛІКИ

  • Надмірна складність для невеликих проєктів: для проєктів із коротким життєвим циклом або підтримкою використання Git Flow може бути зайвим (але це не часто трапляється).
  • Проблема з merge у великих проєктах: під час інтенсивної розробки у великих командах можуть виникати конфлікти під час merge.
  • Зниження швидкості розробки: у великих проєктах потрібно проходити усі етапи під час розробки, і через це може збільшуватися час на саму розробку.

ВИСНОВОК

Отже, якщо підсумувати, то Git Flow — це як помічник для команди розробників, де все розкладено по поличках.

Усі завжди знають, де що зберігається: стабільний код у master, розробка в develop, нові фічі окремо, а виправлення критичних багів — ще в іншій гілці. Це реально круто, коли проєкт великий і над ним працює багато людей, бо зникає хаос і плутанина.

Зрозуміло, є і свої мінуси. Наприклад, якщо проєкт маленький, то вся ця структура може бути трохи «забагато». Але в серйозних проєктах, де важливо, щоб усе було чітко й без сюрпризів, Git Flow рятує.

Звісно, буває, що при злитті гілок виникають конфлікти, і часом це трохи гальмує процес, але маєте погодитися — краще витратити трохи більше часу на структурування, ніж потім розгрібати хаос.

Тож, якщо працюєте в команді та шукаєте рішення, яке може спростити життя всій команді, то Git Flow — це реально класний вибір.

Рекомендуємо публікації по темі