Main Branch (fost Master) — este ramura principală Git care conține codul stabil de producție, gata de implementare. Fiecare commit din main corespunde unei versiuni de lansare a proiectului, iar ramura în sine este protejată împotriva modificărilor directe și servește ca sursă unică de adevăr pentru întreaga echipă. Potrivit GitHub, 2020, începând cu octombrie 2020, noua ramură implicită se numește main în loc de master.
Principalele puncte
Main Branch (sau Master — în funcție de setările depozitului) — este ramura implicită care se creează la inițializarea oricărui depozit Git. Este ramura principală a proiectului și conține codul gata de implementare în producție.
Spre deosebire de develop, unde are loc munca zilnică cu funcții noi, main este vitrina proiectului. Fiecare versiune de cod din main a parcurs un ciclu complet: dezvoltare în ramura feature, integrare în develop, pregătirea lansării în ramura release și testare finală. Abia după aceea modificările ajung în main.
Principiu cheie: main trebuie să fie întotdeauna stabilă. Dacă se descoperă o eroare în main, aceasta înseamnă un hotfix urgent care trebuie lansat în afara programului. De aceea, în proiectele profesionale, main este protejată de modificări accidentale prin branch protection rules.
Potrivit Git Book, main nu este o ramură specială cu proprietăți deosebite, ci o referință obișnuită la un commit care, prin convenție, este considerată principală. Git nu face distincție între main și orice altă ramură la nivel de sistem.
Istoric, ramura implicită în Git se numea master. În iunie 2020, mișcarea Black Lives Matter a atras atenția asupra termenilor master și slave în industria IT. GitHub a anunțat tranziția la termenul main pentru ramura implicită.
Începând cu octombrie 2020, toate depozitele noi pe GitHub sunt create cu ramura main. GitLab și Bitbucket au implementat, de asemenea, suportul pentru main ca nume implicit. Git 2.28 (iulie 2020) a adăugat opțiunea init.defaultBranch pentru configurarea numelui ramurii implicite.
Din punct de vedere tehnic, redenumirea unei ramuri existente din master în main este o operațiune simplă. Dificultatea principală constă în actualizarea tuturor referințelor din configurațiile CI/CD, documentație și depozitele locale ale dezvoltatorilor.
Pentru a redenumi ramura într-un depozit existent, executați:
# Redenumirea locală a master în main
git branch -m master main
# Actualizarea depozitului la distanță
git push -u origin main
# Ștergerea vechiului master pe server
git push origin --delete master
# Actualizarea HEAD pe server
# (prin interfața web GitHub: Settings → Branches → Default branch)
Git Flow și GitHub Flow definesc diferit rolul ramurii main. Alegerea modelului depinde de mărimea echipei, frecvența lansărilor și cerințele de stabilitate a codului.
| Caracteristică | Git Flow | GitHub Flow |
|---|---|---|
| Rolul main | Doar versiuni de lansare | Ramura centrală de dezvoltare |
| Ramuri suplimentare | Develop, Release, Hotfix | Doar ramuri feature |
| Frecvența lansărilor | O dată la 1-4 săptămâni | De mai multe ori pe zi |
| Complexitate | Ridicată | Scăzută |
| Când să alegeți | Aplicații mobile cu cicluri de lansare | Servicii web cu implementare continuă |
Pentru dezvoltarea de aplicații mobile, standardul este Git Flow, deoarece publicarea aplicației în App Store și Google Play are cicluri de lansare fixe. GitHub Flow este mai potrivit pentru proiecte web cu posibilitatea de implementare de mai multe ori pe zi.
În GitHub Flow nu există ramura develop. Toate ramurile feature sunt create direct din main, iar după finalizare sunt reunite înapoi prin Pull Request. Fiecare reunire în main declanșează automat implementarea în producție. Acest model necesită automatizare avansată a testării și disciplină de echipă.
În GitHub Flow nu există ramura develop. Toate ramurile feature sunt create direct din main, iar după finalizare sunt reunite înapoi prin Pull Request. Fiecare reunire în main declanșează automat implementarea în producție. Acest model necesită automatizare avansată a testării și disciplină de echipă.
Branch protection pentru main — o configurație obligatorie în orice proiect comercial. Fără ea, un push accidental poate trimite în producție cod neterminat sau poate strica aplicația funcțională pentru toți utilizatorii.
Configurarea tuturor celor șase reguli — standard pentru proiectele mobile cu audiență de 10.000+ utilizatori. Pentru proiectele mici, primele trei reguli sunt suficiente.
Nivelul de protecție a main depinde de scara proiectului. Un startup se poate descurca cu protecție minimă, în timp ce o aplicație enterprise necesită restricții maxime.
Etichetarea (tagging) — practica creării de referințe denumite către commit-uri specifice din main. Fiecare etichetă corespunde unei versiuni de aplicație lansate în producție. Aceasta permite comutarea rapidă la orice lansare anterioară pentru depanare sau patch.
Standardul de denumire a etichetelor în dezvoltarea de aplicații mobile — SemVer (Semantic Versioning): v1.2.3, unde primul număr este versiunea majoră (breaking changes), al doilea — minoră (funcții noi), al treilea — patch (corecții).
Eticheta se creează după reunirea ramurii release în main. Acest commit este apoi construit în CI/CD, semnat și trimis în magazinul de aplicații. Dacă se descoperă o eroare în etichetă, se creează o ramură hotfix din acea etichetă.
# Crearea unei etichete de lansare adnotate
git tag -a v2.4.1 -m "Release version 2.4.1"
# Trimiterea etichetei pe server
git push origin v2.4.1
# Vizualizarea tuturor etichetelor din depozit
git tag -l "v2.*"
# Crearea unei ramuri hotfix dintr-o etichetă specifică
git checkout -b hotfix/crash-fix v2.4.1
Înțelegerea ierarhiei ramurilor în Git Flow — fundamentul organizării corecte a dezvoltării colaborative. Fiecare tip de ramură are sursa, scopul și regulile de reunire proprii.
Regulă importantă: feature nu se reunește niciodată direct în main. feature → develop → release → main — lanțul corect de reunire. Încălcarea acestei reguli face ca întregul model Git Flow să-și piardă sensul.
Luați în considerare scenariul: echipa a finalizat pregătirea lansării v2.5.0. Ramura release a fost verificată și este gata pentru reunirea în main. După reunire, se creează eticheta și lansarea este publicată.
# Comutarea la main și actualizarea
git checkout main
git pull origin main
# Reunirea ramurii release verificate
git merge --no-ff release/2.5.0
# Crearea etichetei de lansare
git tag -a v2.5.0 -m "Release 2.5.0 - Payment integration"
# Trimiterea main și a etichetei pe server
git push origin main --tags
Fanionul --no-ff (no fast-forward) garantează crearea unui commit de reunire, chiar dacă reunirea ar fi putut fi realizată prin simpla mutare a indicatorului. Aceasta păstrează informația că modificările provin din ramura release, ceea ce simplifică analiza istoricului.
Dacă se descoperă o eroare critică în producție, procesul diferă de lansarea obișnuită. Hotfix-ul se creează din main, iar după corectare se reunește atât în main, cât și în develop.
Dacă se descoperă o eroare critică în producție, procesul diferă de lansarea obișnuită. Hotfix-ul se creează din main, iar după corectare se reunește atât în main, cât și în develop.
# Crearea ramurii hotfix din main
git checkout main
git checkout -b hotfix/2.5.1-crash-fix
# Corectarea și commit
git add src/fix/
git commit -m "Fix crash on login screen"
# Reunirea hotfix înapoi în main
git checkout main
git merge --no-ff hotfix/2.5.1-crash-fix
git tag -a v2.5.1 -m "Hotfix 2.5.1"
git push origin main --tags
# Reunirea hotfix, de asemenea, în develop
git checkout develop
git merge --no-ff hotfix/2.5.1-crash-fix
git push origin develop
# Ștergerea ramurii hotfix
git branch -d hotfix/2.5.1-crash-fix
Întrebări frecvente
Din punct de vedere tehnic — da, este o referință obișnuită la un commit. Dar practic — nu, deoarece main este ramura implicită și majoritatea platformelor nu permit ștergerea ramurii setate ca default branch. În loc să o ștergeți, creați o nouă default branch și apoi ștergeți-o pe cea veche.
Dacă eroarea nu este critică, utilizați procesul obișnuit: creați o ramură feature din develop, corectați eroarea, treceți prin revizuirea codului și așteptați următorul ciclu de lansare. Hotfix-ul este folosit doar pentru erori critice care blochează activitatea utilizatorilor.
main — ramura locală pe calculatorul dumneavoastră. origin/main — cache-ul local al stării ramurii de la distanță pe server. Comanda git fetch actualizează origin/main, iar git pull reunește imediat modificările în main-ul dumneavoastră local.
Utilizați git clone pentru a copia întregul depozit în noul director. Dacă trebuie să schimbați URL-ul de la distanță, executați git remote set-url origin. Pentru a schimba directorul de lucru fără a copia depozitul, utilizați git worktree add.
Da, chiar și într-o echipă de două persoane, protejarea main este justificată. Un push accidental cu o comandă greșită poate suprascrie istoricul. Protecția minimă — interzicerea push-urilor directe și cerința PR — durează 5 minute pentru configurare și previne ore de recuperare a datelor.
Rezumat
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