În primul rând, așa cum subliniază @AndrewFinnell și @KenLiu, în SVN numele directoarelor în sine nu înseamnă nimic -- „trunk, ramuri și etichete” sunt pur și simplu o convenție comună care este folosită de majoritatea depozitelor. Nu toate proiectele folosesc toate directoarele (este destul de obișnuit să nu folosiți „etichete” deloc) și, de fapt, nimic nu vă împiedică să le numiți cum doriți, deși încălcarea convențiilor este adesea confuză.
Voi descrie probabil cel mai comun scenariu de utilizare a ramurilor și etichetelor și voi da un exemplu de scenariu despre modul în care sunt utilizate.
Trunk: zona principală de dezvoltare. Aici se află următoarea versiune majoră a codului și, în general, are toate cele mai noi caracteristici.
Sucursale: de fiecare dată când lansați o versiune majoră, se creează o ramură. Acest lucru vă permite să remediați erori și să faceți o nouă lansare fără a fi nevoie să lansați cele mai noi - posibil neterminate sau netestate - caracteristici.
Etichete: de fiecare dată când lansați o versiune (lansare finală, candidate pentru lansare (RC) și beta), creați o etichetă pentru aceasta. Acest lucru vă oferă o copie punctuală a codului așa cum era în acea stare, permițându-vă să reveniți și să reproduceți orice erori, dacă este necesar, într-o versiune anterioară sau să relansați o versiune anterioară exact așa cum a fost. Ramurile și etichetele din SVN sunt ușoare - pe server, nu face o copie completă a fișierelor, doar un marker care spune „aceste fișiere au fost copiate la această revizuire” care ocupă doar câțiva octeți. Având în vedere acest lucru, nu ar trebui să vă îngrijorați niciodată crearea unei etichete pentru orice cod lansat. După cum am spus mai devreme, etichetele sunt adesea omise și, în schimb, un jurnal de modificări sau alt document clarifică numărul de revizuire atunci când se face o lansare.
De exemplu, să presupunem că începeți un nou proiect. Începi să lucrezi în „trunk”, la ceea ce va fi lansat în cele din urmă ca versiunea 1.0.
- trunk/ - versiunea de dezvoltare, în curând 1.0
- ramuri/ - goale
Odată ce 1.0.0 este terminat, ramificați trunchiul într-o nouă ramură „1.0” și creați o etichetă „1.0.0”. Acum lucrați la ceea ce va fi în cele din urmă 1.1 continuă în portbagaj.
- trunk/ - versiunea de dezvoltare, va fi în curând 1.1
- branches/1.0 - versiunea de lansare 1.0.0
- tags/1.0.0 - versiunea de lansare 1.0.0
Întâlniți câteva erori în cod și le remediați în trunk, apoi îmbinați remedierea în ramura 1.0. Puteți, de asemenea, să faceți opusul și să remediați erorile din ramura 1.0 și apoi să le îmbinați înapoi în trunchi, dar de obicei proiectele se limitează la fuziunea într-un singur sens doar pentru a reduce șansa de a pierde ceva. Uneori, un bug poate fi remediat doar în 1.0, deoarece este învechit în 1.1. Nu contează cu adevărat: vrei doar să te asiguri că nu lansezi 1.1 cu aceleași erori care au fost remediate în 1.0.
- trunk/ - versiunea de dezvoltare, în curând 1.1
- branchs/1.0 - următoarea lansare 1.0.1
- tags/1.0.0 - versiunea de lansare 1.0.0
Odată ce găsiți suficiente erori (sau poate o eroare critică), vă decideți să faceți o versiune 1.0.1. Deci faci o etichetă „1.0.1” din ramura 1.0 și eliberezi codul. În acest moment, trunchiul va conține ceea ce va fi 1.1, iar ramura „1.0” conține codul 1.0.1. Data viitoare când lansați o actualizare la 1.0, aceasta va fi 1.0.2.
- trunk/ - versiunea de dezvoltare, în curând 1.1
- branchs/1.0 - următoarea lansare 1.0.2
- tags/1.0.0 - versiunea de lansare 1.0.0
- tags/1.0.1 - versiunea de lansare 1.0.1
În cele din urmă, ești aproape gata să lansezi 1.1, dar mai întâi vrei să faci o versiune beta. În acest caz, probabil că veți face o ramură „1.1” și o etichetă „1.1beta1”. Acum, lucrul la ceea ce va fi 1.2 (sau 2.0 poate) continuă în trunk, dar lucrul la 1.1 continuă în ramura „1.1”.
- trunk/ - versiunea de dezvoltare, va fi în curând 1.2
- ramuri/1.0 - viitoarea lansare 1.0.2
- branches/1.1 - viitoarea lansare 1.1.0
- tags/1.0.0 - versiunea de lansare 1.0.0
- tags/1.0.1 - versiunea de lansare 1.0.1
- tags/1.1beta1 - versiunea 1.1 beta 1
Odată ce lansați 1.1 final, faceți o etichetă „1.1” din ramura „1.1”.
De asemenea, puteți continua să mențineți 1.0 dacă doriți, portarea remedierii erorilor între toate cele trei ramuri (1.0, 1.1 și trunk). Cea mai importantă concluzie este că pentru fiecare versiune principală a software-ului pe care o întrețineți, aveți o ramură care conține cea mai recentă versiune de cod pentru acea versiune.
O altă utilizare a ramurilor este pentru caracteristici. Aici ramificați trunchiul (sau una dintre ramurile de lansare) și lucrați la o nouă caracteristică în mod izolat. Odată ce caracteristica este finalizată, o îmbinați din nou și eliminați ramura.
- trunk/ - versiunea de dezvoltare, în curând 1.2
- ramuri/1.1 - viitoarea lansare 1.1.0
- ramuri/ui-rewrite - ramură caracteristică experimentală
Ideea este atunci când lucrezi la ceva perturbator (care ar împiedica sau interfera cu alți oameni să-și facă munca), ceva experimental (care poate nici măcar să nu ajungă) sau, eventual, doar ceva care durează mult timp. (și vă este teamă dacă ține o versiune 1.2 când sunteți gata să ramificați 1.2 din trunchi), o puteți face izolat în ramură. În general, îl țineți actualizat cu trunchiul, îmbinând modificările în acesta tot timpul, ceea ce face mai ușor de reintegrat (imbinarea înapoi în trunchi) când ați terminat.
De asemenea, rețineți că schema de versiuni pe care am folosit-o aici este doar una dintre multe. Unele echipe ar face lansări de remediere/întreținere a erorilor ca 1.1, 1.2 etc. și modificări majore ca 1.x, 2.x etc. Utilizarea aici este aceeași, dar puteți numi ramura „1” sau „1”. .x” în loc de „1.0” sau „1.0.x”. (În afară de aceasta, versiune semantică este un ghid bun despre cum să faci numere de versiune).
person
gregmac
schedule
20.09.2008