Feature Branch „ је техника гранања у Git-у, при којој се свака нова функција развија у посебној грани, изолованој од главног кода. Ово омогућава више програмера да истовремено раде на различитим задацима без ризика да оштете стабилну верзију пројекта. Према Atlassian, 2024, Feature Branch је кључни елемент Git Flow-а и користи се у већини комерцијалних пројеката.
Главне ствари
feature/назив-функције у стандардном Git Flow-у.Feature Branch (грана функције) „ је привремена грана у Git-у, креирана од develop за развој посебне функционалности. За разлику од дуготрајних грана main и develop, feature гране постоје ограничено време „ од неколико сати до неколико недеља.
Основни циљ feature branch-а је да изолује промене везане за један задатак од остатка кода. Програмер може да експериментише, прави више комитова, па чак и да поквари код у својој грани, без утицаја на рад других чланова тима.
Након завршетка развоја, feature грана се спаја назад у develop путем Pull Request-а са обавезним прегледом кода. Након спајања, грана се обично брише како би репозиторијум остао чист.
Према Vincent Driessen, 2010, модел Git Flow са feature гранама постао је индустријски стандард захваљујући јасној подели одговорности између различитих типова грана.
Ток рада са feature branch-ом се састоји од низа корака које програмер извршава за сваку нову функцију. Овај процес минимизира конфликте спајања и обезбеђује контролу квалитета кода.
Периодична синхронизација са develop је критично важна. Што дуже feature грана живи без спајања промена из develop-а, већа је вероватноћа конфликата при коначном спајању.
| Учесталост синхронизације | Ризик од конфликата | Погодност развоја |
|---|---|---|
| Свакодневно | Низак | Захтева чест rebase или merge |
| Једном недељно | Средњи | Удобан режим, умерени конфликти |
| Једном месечно | Висок | Ризик сложених решавања merge конфликата |
| Никад | Критичан | Спајање може бити немогуће без губитка података |
Именовање грана „ важан део тимске дисциплине. Јединствени стандард назива омогућава брзо одређивање на ком задатку се ради и ко га извршава.
feature/added-auth-module.feature/PROJ-42-add-login.feature/feat/analytics-dashboard.Коришћење ID-ја задатка из JIRA, Trello или другог система је најбоља пракса. Он аутоматски повезује код са задатком и поједностављује претрагу грана путем git log-а.
Pull Request (или Merge Request у GitLab-у) „ је захтев за спајање feature гране у develop. PR није само техничка операција, већ процес тимског прегледа кода који подиже квалитет кода и шири знање унутар тима.
Добар PR садржи наслов са кратким описом задатка, линк до тикета и опис промена. Програмер треба да наведе шта је тачно урађено, које датотеке су измењене и да ли постоје потенцијални ризици за друге делове пројекта.
Тим прегледа код у PR-у, оставља коментаре, захтева измене (change requests) и одобрава спајање (approve). Након одобравања, извршава се merge или squash merge.
Просечно време прегледа PR-а у мобилном развоју је од 4 до 24 сата. Библиотека Danger аутоматизује део провера, покрећући lint-ере и тестове директно у PR-у.
Након одобрења PR-а, feature грана може бити спојена у develop на различите начине. Избор стратегије спајања утиче на историју комитова и могућност враћања промена.
За мобилне пројекте са честим издањима најчешће се користи squash merge: даје чисту историју у develop-у, а детаљи развоја остају у опису PR-а и задатку tracker-а.
Чак и искусни програмери праве грешке при раду са feature гранама. Познавање типичних проблема помаже да се избегне губитак времена и података.
Најбољи начин да се избегну ови проблеми је договор о правилима рада на почетку пројекта и коришћење аутоматских провера у CI/CD пајплајну.
Размотримо практични сценарио: програмер започиње нову функцију аутентификације у мобилној апликацији. Креира feature грану, ради на коду и завршава задатак Pull Request-ом.
# Ажурирање develop-а и креирање feature гране
git checkout develop
git pull origin develop
git checkout -b feature/add-login-screen
# Рад на функцији: комитови
git add src/ui/login/
git commit -m "Add login screen layout"
# Слање feature гране на сервер
git push origin feature/add-login-screen
# Синхронизација са develop (rebase)
git fetch origin develop
git rebase origin/develop
# Након одобрења PR-а: ажурирање локалног develop-а и брисање гране
git checkout develop
git pull origin develop
git branch -d feature/add-login-screen
Команда git branch -d брише грану тек након што су њене промене потпуно спојене. Ако грана није спојена, Git ће предложити коришћење git branch -D за принудно брисање „ користите овај флаг опрезно.
CI/CD пајплајн треба да се покреће за сваку feature грану пре креирања PR-а. Ово омогућава откривање проблема у раној фази, пре него што код стигне на преглед другим програмерима.
# GitHub Actions за проверу feature гране
name: Feature Branch CI
on:
push:
branches:
- 'feature/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: ./gradlew test
- name: Lint check
run: ./gradlew lint
Пајплајн проверава да ли се код компајлира, тестови пролазе и стил кода одговара стандардима прихваћеним у тиму. Тек након проласка свих провера може се креирати Pull Request.
Често постављана питања
Да, то је стандардна пракса. Сваки програмер може радити у својој feature грани, и све се синхронизују са develop-ом независно. Главно правило „ једна грана за један задатак, да би се избегле cross-task зависности у коду.
Извршите git rebase origin/develop на вашој feature грани. Ако настану конфликти „ решавајте их један по један, комитови ће бити преписани изнад последњег стања develop-а. Након rebase-а биће потребно git push --force за ажурирање удаљене гране.
Ако је задатак отказан, feature грана се може једноставно обрисати. Користите git branch -d feature/name за локалну грану и git push origin --delete feature/name за удаљену. Све некомитоване промене ће бити изгубљене.
У суштини, то је исто. Различити тимови користе различите префиксе: feature/, task/, feat/. Разлике у Git механици нема „ све су то привремене гране креиране из develop-а за изоловани развој.
Да, то је обавезна пракса. Гране након спајања затрпавају листу референци и могу изазвати забуну. Већина платформи (GitHub, GitLab) нуди брисање гране одмах након merge PR-а, а локалне гране се бришу командом git branch -d.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође