Release Branch — је грана у Git Flow-у која се креира из develop-а за припрему одређеног издања. У њој се фиксира верзија апликације, исправљају последње грешке и ажурирају метаподаци — без додавања нових функционалности. Према Vincent Driessen, 2010, релеаз грана одваја припрему издања од текућег развоја, што омогућава паралелно вођење обе активности.
Главно
release/X.Y.Z према верзији апликације.Release Branch (релеаз грана) — је привремена грана у Git Flow-у, креирана из develop-а када тим одлучи да је тренутни скуп функција спреман за објављивање. Постоји тачно онолико колико траје коначна припрема издања — од неколико сати до неколико дана.
Основна намена релеаз гране — замрзнути одређени скуп функција за издање, без заустављања развоја следећих верзија. Док се релеаз грана припрема за објављивање, други програмери могу наставити да спајају feature гране у develop за следеће издање.
У релеаз грани се не креирају нове функције — само исправке грешака, ажурирање верзије апликације, локализација и документација. Након завршетка свих радова, релеаз грана се спаја у main (означава се као издање) и назад у develop (како би исправке грешака стигле у будуће верзије).
Према Atlassian, 2024, релеаз гране су критично важне за пројекте са редовним циклусима издања — оне обезбеђују предвидљивост и стабилност процеса објављивања.
Животни циклус релеаз гране од креирања до брисања укључује неколико фаза. Разумевање сваке фазе помаже тиму да синхронизује акције и избегне грешке.
release/2.5.0. develop наставља да прима feature гране за следећу верзију.v2.5.0.Тачка 6 — повратно спајање у develop — често се заборавља, али је критично важно. Без њега, исправке грешака направљене у release неће стићи у develop, а у следећем издању исте грешке се могу поново појавити.
Време живота релеаз гране зависи од сложености издања и квалитета кода у develop-у. У просеку припрема траје од 2 до 5 радних дана за мобилну апликацију средње величине.
У релеаз грани се извршава строго ограничен скуп задатака. Било какво одступање од ове листе нарушава модел Git Flow-а и ствара ризике за стабилност издања.
| Тип измена | Дозвољено | Пример |
|---|---|---|
| Верзионирање | Да | Ажурирање versionName у build.gradle |
| Исправке грешака | Да | Поправка crash-а при покретању |
| Локализација | Да | Додавање превода за нове екране |
| Документација | Да | Ажурирање CHANGELOG и README |
| Нове функције | Не | Додавање новог екрана профила |
| Рефакторинг | Не | Преписивање мрежног слоја |
| Ажурирање библиотека | Опрезно | Само patch верзије за исправке грешака |
Правило забране нових функција — најважније у релеаз грани. Ако функција није стигла за издање, чека следећи циклус. Покушај да се недовршена функција прогура у релеаз грану — главни разлог кашњења и грешака у продукцији.
У релеаз грани се обавезно ажурира број верзије апликације. За Android су то поља versionCode и versionName у build.gradle, за iOS — CFBundleShortVersionString у Info.plist.
// build.gradle (app-level) — ажурирање верзије у релеаз грани
android {
defaultConfig {
versionCode 42
versionName "2.5.0"
}
}
// За iOS — ажурирање Info.plist
// CFBundleShortVersionString = 2.5.0
// CFBundleVersion = 42
Почетници програмери често мешају release и hotfix гране, иако је њихова намена потпуно различита. Грешка у избору типа гране може довести до кашњења критичне исправке или нарушавања процеса издања.
Ако је грешка откривена у процесу припреме издања (у релеаз грани) — то је обична исправка грешке. Ако је грешка откривена у продукцији (на main-у) — то је hotfix и креира се из main-а, чак и ако релеаз грана већ постоји.
Јединствени стандард именовања релеаз грана поједностављује навигацију кроз репозиторијум и омогућава CI/CD системима да аутоматски одреде да грана припада процесу издања.
release/2.5.0.release/merlin.release/2024-12-01.Формат release/X.Y.Z — пожељан, јер експлицитно повезује грану са бројем верзије који ће бити додељен издању. Ово поједностављује претрагу и аутоматску обраду скриптама CI/CD.
Повратно спајање (merge back) релеаз гране у develop — једна од најважнијих и истовремено често прескаканих операција. Без њега све исправке грешака направљене у release остају само у верзији издања и не стижу у следећи циклус издања.
Процес повратног спајања се извршава након што је релеаз грана већ спојена у main. Прво се release спаја у develop, затим — брише. Ово гарантује да develop садржи све исправке направљене у процесу припреме издања.
Након повратног спајања могући су конфликти — посебно ако су се у develop-у појавиле нове feature гране које су мењале исте датотеке. Програмер одговоран за издање решава ове конфликте и гура develop на сервер.
Неки тимови користе rebase уместо merge за повратно спајање, како би историја остала линеарна. Међутим, merge је сигурнији за develop, јер не преписује историју комитова које су други програмери можда већ користили.
Размотримо комплетан циклус рада са релеаз граном: од креирања до брисања након успешног издања мобилне апликације верзије 2.5.0.
# 1. Креирање релеаз гране из develop-а
git checkout develop
git pull origin develop
git checkout -b release/2.5.0
# 2. Ажурирање верзије и исправке грешака
git add build.gradle
git commit -m "Bump version to 2.5.0"
# 3. Исправљање грешака (само bugfixes)
git add src/fix/
git commit -m "Fix crash on payment screen"
# 4. Слање релеаз гране на сервер
git push origin release/2.5.0
# 5. Спајање release у main
git checkout main
git pull origin main
git merge --no-ff release/2.5.0
git tag -a v2.5.0 -m "Release 2.5.0"
git push origin main --tags
# 6. Повратно спајање у develop
git checkout develop
git merge --no-ff release/2.5.0
git push origin develop
# 7. Брисање релеаз гране
git branch -d release/2.5.0
git push origin --delete release/2.5.0
Команде 5 и 6 — двоструко спајање — критично су важне. Прво main добија код издања и ознаку, затим develop синхронизује исправке грешака из release. Ако се прескочи корак 6, исправке из издања не стижу у следећи циклус развоја.
За мобилне пројекте са редовним издањима, процес креирања релеаз гране и ажурирања верзије може се аутоматизовати путем CI/CD скрипти. GitHub Actions омогућава креирање workflow-а који на притисак дугмета креира релеаз грану са аутоматским ажурирањем верзије.
За мобилне пројекте са редовним издањима, процес креирања релеаз гране и ажурирања верзије може се аутоматизовати путем CI/CD скрипти. GitHub Actions омогућава креирање workflow-а који на притисак дугмета креира релеаз грану са аутоматским ажурирањем верзије.
# GitHub Actions — аутоматизација креирања релеаз гране
name: Create Release Branch
on:
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g. 2.5.0)'
required: true
jobs:
create-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create release branch
run: |
git checkout develop
git checkout -b release/${{ inputs.version }}
git push origin release/${{ inputs.version }}
Често постављана питања
Само једна релеаз грана истовремено, ако следите Git Flow. Постојање две активне релеаз гране значи да тим покушава да објави два издања паралелно — то нарушава принцип секвенцијалних издања и ствара забуну са верзијама.
Уклоните комите недовршене функције из релеаз гране путем git revert и одложите функцију до следећег издања. Никада не објављујте недовршену функционалност у продукцију — технички дуг и потенцијалне грешке нису вредни журбе.
За једноставна издања са једном исправком, релеаз грана се може прескочити и извршити спајање директно из develop-а у main. Међутим, за стандардна издања релеаз грана је обавезна — фиксира верзију, изолује припрему и обезбеђује двоструко спајање исправки грешака.
Користите git revert у main-у за креирање новог комита који поништава све измене издања. Затим уклоните ознаку издања командом git push origin --delete vX.Y.Z. Након исправљања проблема, креирајте нову релеаз грану са увећаним бројем исправке.
Release candidate (RC) — артефакт компилације који пролази коначно тестирање. Release branch — то је Git грана из које се креира release candidate. Једна релеаз грана може произвести неколико RC компилација (RC1, RC2 итд.) како се грешке исправљају.
Закључак
release/X.Y.Z са бројем верзије према SemVer.Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође