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 автоматизира част от проверките, стартирайки линтери и тестове директно в PR.
След одобрение на PR, feature клонът може да бъде слят в develop по различни начини. Изборът на стратегия за сливане влияе на историята на комитите и възможността за връщане на промени.
За мобилни проекти с чести издания най-често се използва squash merge: дава чиста история в develop, а детайлите на разработката остават в описанието на PR и в задачата на тракера.
Дори опитни разработчици допускат грешки при работа с 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също