Feature Branch „ este o tehnică de ramificare în Git, în care fiecare funcție nouă este dezvoltată într-o ramură separată, izolată de codul principal. Acest lucru permite mai multor dezvoltatori să lucreze simultan la sarcini diferite fără riscul de a deteriora versiunea stabilă a proiectului. Potrivit Atlassian, 2024, Feature Branch este un element cheie al Git Flow și este utilizat în majoritatea proiectelor comerciale.
Principalele idei
feature/numele-funcției în Git Flow standard.Feature Branch (ramura de funcție) „ este o ramură temporară în Git, creată din develop pentru dezvoltarea unei funcționalități separate. Spre deosebire de ramurile de lungă durată main și develop, ramurile feature există pentru o perioadă limitată „ de la câteva ore la câteva săptămâni.
Scopul principal al feature branch este de a izola modificările legate de o singură sarcină de restul codului. Dezvoltatorul poate experimenta, poate face numeroase commit-uri și chiar poate strica codul în ramura sa, fără a afecta munca celorlalți membri ai echipei.
După finalizarea dezvoltării, ramura feature este îmbinată înapoi în develop prin Pull Request cu revizuire obligatorie a codului. După îmbinare, ramura este de obicei ștearsă pentru a menține repository-ul curat.
Potrivit Vincent Driessen, 2010, modelul Git Flow cu ramuri feature a devenit standardul industriei datorită separării clare a responsabilităților între diferitele tipuri de ramuri.
Fluxul de lucru cu feature branch constă dintr-o succesiune de pași pe care dezvoltatorul îi execută pentru fiecare funcție nouă. Acest proces minimizează conflictele de îmbinare și asigură controlul calității codului.
Sincronizarea periodică cu develop este esențială. Cu cât o ramură feature trăiește mai mult fără a îmbina modificările din develop, cu atât este mai mare probabilitatea conflictelor la îmbinarea finală.
| Frecvența sincronizării | Risc de conflicte | Confortul dezvoltării |
|---|---|---|
| Zilnic | Scăzut | Necesită rebase sau merge frecvent |
| O dată pe săptămână | Mediu | Mod confortabil, conflicte moderate |
| O dată pe lună | Ridicat | Risc de rezolvare complexă a conflictelor de îmbinare |
| Niciodată | Critic | Îmbinarea poate fi imposibilă fără pierderea datelor |
Denumirea ramurilor „ o parte importantă a disciplinei de echipă. Un standard unitar de denumire permite identificarea rapidă a sarcinii la care se lucrează și a persoanei care o execută.
feature/added-auth-module.feature/PROJ-42-add-login.feature/feat/analytics-dashboard.Utilizarea ID-ului sarcinii din JIRA, Trello sau alt sistem este cea mai bună practică. Acesta leagă automat codul de sarcină și simplifică căutarea ramurilor prin git log.
Pull Request (sau Merge Request în GitLab) „ este o solicitare de îmbinare a ramurii feature în develop. PR nu este doar o operațiune tehnică, ci un proces de revizuire a codului în echipă care îmbunătățește calitatea codului și răspândește cunoștințele în cadrul echipei.
Un PR bun conține un titlu cu o descriere scurtă a sarcinii, un link către ticket și o descriere a modificărilor. Dezvoltatorul trebuie să indice exact ce s-a făcut, ce fișiere au fost modificate și dacă există riscuri potențiale pentru alte părți ale proiectului.
Echipa examinează codul în PR, lasă comentarii, solicită modificări (change requests) și aprobă îmbinarea (approve). După aprobare, se execută merge sau squash merge.
Timpul mediu de verificare a PR în dezvoltarea mobilă este de la 4 la 24 de ore. Biblioteca Danger automatizează o parte din verificări, rulând linter-e și teste direct în PR.
După aprobarea PR, ramura feature poate fi îmbinată în develop în diferite moduri. Alegerea strategiei de îmbinare influențează istoricul commit-urilor și posibilitatea de revenire a modificărilor.
Pentru proiectele mobile cu lansări frecvente, cel mai des se utilizează squash merge: oferă un istoric curat în develop, iar detaliile dezvoltării rămân în descrierea PR și în sarcina tracker-ului.
Chiar și dezvoltatorii experimentați fac greșeli atunci când lucrează cu ramurile feature. Cunoașterea problemelor tipice ajută la evitarea pierderii de timp și date.
Cea mai bună modalitate de a evita aceste probleme este să conveniți asupra regulilor de lucru la începutul proiectului și să utilizați verificări automate în pipeline-ul CI/CD.
Să analizăm un scenariu practic: un dezvoltator începe o nouă funcție de autentificare într-o aplicație mobilă. Creează o ramură feature, lucrează la cod și finalizează sarcina cu un Pull Request.
# Actualizarea develop și crearea ramurii feature
git checkout develop
git pull origin develop
git checkout -b feature/add-login-screen
# Lucrul la funcție: commit-uri
git add src/ui/login/
git commit -m "Add login screen layout"
# Trimiterea ramurii feature pe server
git push origin feature/add-login-screen
# Sincronizarea cu develop (rebase)
git fetch origin develop
git rebase origin/develop
# După aprobarea PR: actualizarea local develop și ștergerea ramurii
git checkout develop
git pull origin develop
git branch -d feature/add-login-screen
Comanda git branch -d șterge ramura numai după ce modificările sale au fost complet îmbinate. Dacă ramura nu este îmbinată, Git va sugera utilizarea git branch -D pentru ștergerea forțată „ utilizați acest flag cu prudență.
Pipeline-ul CI/CD trebuie să ruleze pentru fiecare ramură feature înainte de crearea PR. Acest lucru permite detectarea problemelor într-un stadiu incipient, înainte ca codul să ajungă la revizuirea altor dezvoltatori.
# GitHub Actions pentru verificarea ramurii 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
Pipeline-ul verifică dacă codul se compilează, testele trec și stilul codului corespunde standardelor acceptate în echipă. Numai după trecerea tuturor verificărilor se poate crea un Pull Request.
Întrebări frecvente
Da, este o practică standard. Fiecare dezvoltator poate lucra în propria ramură feature și toate se sincronizează cu develop independent. Regula principală „ o ramură pentru o sarcină, pentru a evita dependențele cross-task în cod.
Executați git rebase origin/develop pe ramura voastră feature. Dacă apar conflicte „ rezolvați-le unul câte unul, commit-urile vor fi rescrise deasupra ultimei stări a develop. După rebase va fi necesar git push --force pentru actualizarea ramurii remote.
Dacă sarcina a fost anulată, ramura feature poate fi pur și simplu ștearsă. Utilizați git branch -d feature/name pentru ramura locală și git push origin --delete feature/name pentru cea remote. Toate modificările necomitute se vor pierde.
În esență, este același lucru. Diferite echipe folosesc prefixe diferite: feature/, task/, feat/. Nu există nicio diferență în mecanica Git „ toate sunt ramuri temporare create din develop pentru dezvoltare izolată.
Da, este o practică obligatorie. Ramurile după îmbinare aglomerează lista de referințe și pot crea confuzie. Majoritatea platformelor (GitHub, GitLab) oferă ștergerea ramurii imediat după merge PR, iar ramurile locale se șterg cu comanda git branch -d.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și