Ce face "branch", "eticheta" și "portbagaj" înseamnă în Subversiune depozite?

Am'am văzut aceste cuvinte o mulțime în jurul valorii de Subversiune (și cred general repository) discuții. Am fost folosind SVN pentru proiectele mele ultimii ani, dar am'am mai înțeles concept complet de aceste directoare.

Ce înseamnă ele?

Comentarii la întrebare (1)
Soluția

Hmm, nu sunt de acord cu Nick re tag-ul fiind similar cu o ramură. Un tag este doar un marker

  • Portbagaj ar fi corpul principal de dezvoltare, provenite de la începutul proiectului și până în prezent.

  • Sucursală va fi o copie a codului derivate dintr-un anumit punct în portbagaj, care este folosit pentru aplicarea schimbări majore la codul păstrând în același timp integritatea codului în portbagaj. Dacă schimbările majore merge conform planului, acestea sunt de obicei fuzionat înapoi în portbagaj.

  • Tag va fi un punct în timp, pe trunchi sau o sucursală pe care doriți să o păstreze. Cele două motive principale pentru conservare ar fi că nici aceasta este o versiune majoră a software-ului, fie alfa, beta, RC sau RTM, sau acest lucru este cel mai stabil punctul de software-ul înainte de revizuiri majore pe portbagaj au fost aplicate.

În proiecte open source, ramuri majore care nu sunt acceptate în portbagaj de către părțile interesate de proiect pot deveni baze pentru furci -- de exemplu, total proiecte separate, care au o origine comună cu alte codului sursă.

Ramură și tag-ul de subarbore se disting din portbagaj în următoarele moduri:

Subversiune permite administratori de sistem pentru a crea cârlig script-uri care sunt declanșate de executare atunci când apar anumite evenimente; de exemplu, comite o schimbare la depozit. Este foarte comun pentru un tipic Subversiune depozit de implementare a trata orice cale care conține "/tag/" pentru a fi protejat la scriere după creație; rezultatul net este că tag-uri, după ce l-a creat, sunt imuabile (cel puțin la "obișnuit" utilizatorii). Acest lucru se face prin intermediul cârlig script-uri, care impune imutabilitatea prin prevenirea în continuare modificări, dacă tag este un nod părinte a schimbat obiect.

Subversiune, de asemenea, a adăugat caracteristici, începând cu versiunea 1.5, referitoare la "ramură îmbinare de urmărire", astfel încât modificările angajat la o sucursală poate fi fuzionat înapoi în portbagaj cu suport pentru incrementale, "inteligent" care fuzionează.

Comentarii (11)

Mai întâi de toate, ca @AndrewFinnell și @KenLiu subliniez, în SVN directorul nume înseamnă nimic ... "trunchi, ramuri și tag-uri" sunt pur și simplu o convenție comună, care este folosit de cele mai multe depozite. Nu toate proiectele utiliza toate directoarele (it's destul de comună nu de a utiliza "tag-uri", la toate), și, de fapt, nu este nimic de oprire tu de la numindu-i nimic te'd ca, desi încălcarea convenției este de multe ori confuze. Am'll descrie probabil cel mai comun scenariu de utilizare de sucursale și tag-uri, și să dea un exemplu de scenariu de modul în care acestea sunt utilizate.

  • Portbagaj: principala zonă de dezvoltare. Acest lucru este în cazul în care următoarea versiune majoră a codului vieți, și, în general, are toate cele mai noi caracteristici.
  • Sucursale: de Fiecare dată când lansa o versiune majoră, devine o ramură a creat. Acest lucru vă permite de a face bug fixat și de a face o nouă versiune, fără a fi nevoie pentru a elibera cele mai noi - eventual neterminate sau netestate - caracteristici.
  • Categorie: de Fiecare dată când lansa o versiune (versiunea finală, release candidate (RC), și beta) voi face un tag pentru ea. Acest lucru vă oferă un punct-in-time copie a codului de stat, permițându-vă pentru a merge înapoi și de a reproduce orice bug-uri, dacă este necesar, într-o versiune anterioară, sau re-lansare o versiune trecut exact cum a fost. Ramuri și tag-uri în SVN sunt ușoare - pe server, nu face o copie completă a fișierelor, doar un marker spunând "aceste fișiere au fost copiate de la această revizuire", care durează doar câteva bytes. Cu aceasta în minte, niciodată nu ar trebui să fie preocupat de crearea unei etichete pentru orice lansat cod. Cum am spus mai devreme, tag-uri sunt de multe ori omise și, în schimb, un changelog sau alt document care clarifică numărul de revizuire atunci când eliberarea se face.

    De exemplu, să's spun a începe un nou proiect. Începe să lucreze în "portbagaj", pe ceea ce va fi în cele din urmă lansat ca versiune 1.0.

  • portbagaj/ - versiune de dezvoltare, în curând să fie 1.0
  • sucursale/ - gol Odată 1.0.0 este terminat, aveți trunchi sucursală într-un nou "1.0" ramură, și de a crea un "1.0.0" tag. Acum lucra asupra a ceea ce va fi în cele din urmă 1.1 continuă în portbagaj.
  • portbagaj/ - versiune de dezvoltare, în curând să fie 1.1
  • sucursale/1.0 - 1.0.0 release versiune
  • tag-uri/1.0.0 - 1.0.0 release versiune Vin peste unele bug-uri în cod, și fixați-le în portbagaj, și apoi îmbinați fixat la 1.0 ramură. Puteți, de asemenea, face exact opusul, și repara bug-uri în 1.0 ramură și apoi îmbinați-le înapoi la portbagaj, dar de obicei proiecte stick cu care fuzionează-un fel doar pentru a reduce sansa de a pierde ceva. Uneori un bug poate fi stabilit numai în 1.0 pentru că este învechit în 1.1. Nu't contează cu adevărat: vrei doar să asigurați-vă că don't de eliberare 1.1 cu aceleași probleme care au fost reparate în 1.0.
  • portbagaj/ - versiune de dezvoltare, în curând să fie 1.1
  • ramuri/1.0 - viitoare 1.0.1 versiune
  • tag-uri/1.0.0 - 1.0.0 release versiune Odată ce ați găsit bug-uri destul de (sau poate un bug critic), vă decideți pentru a face o 1.0.1 presă. Deci tu ai un tag "1.0.1" de la 1.0 ramură, și eliberați cod. În acest moment, portbagajul va conține ceea ce va fi 1.1, și "1.0" ramură conține 1.0.1 cod. Data viitoare când vă lansa o actualizare la 1.0, ar fi 1.0.2.
  • portbagaj/ - versiune de dezvoltare, în curând să fie 1.1
  • ramuri/1.0 - viitoare 1.0.2 versiune
  • tag-uri/1.0.0 - 1.0.0 release versiune
  • tag-uri/1.0.1 - versiunea 1.0.1 În cele din urmă vă sunt aproape gata pentru a elibera 1.1, dar vrei sa faci un beta prima. În acest caz, puteți face probabil un "1.1" ramură, și un "1.1beta1" tag. Acum, lucrează la ceea ce va fi 1.2 (2.0 sau poate) continuă în portbagaj, dar munca pe 1.1 continuă în "1.1" ramură.
  • portbagaj/ - versiune de dezvoltare, în curând să fie 1.2
  • sucursale/1.0 - viitoare 1.0.2 presă
  • sucursale/1.1 - viitoare 1.1.0 de presă
  • tag-uri/1.0.0 - 1.0.0 release versiune
  • tag-uri/1.0.1 - versiunea 1.0.1
  • tag-uri/1.1beta1 - 1.1 beta 1 versiune Odată eliberați 1.1 final, voi face o "1.1" tag de la "1.1" ramură. Puteți continua, de asemenea, pentru a menține 1.0 daca'd ca, portarea bug fixat între toate cele trei ramuri (1.0, 1.1, si portbagaj). Importante de reținut este faptul că pentru fiecare versiune a software-ului pe care îl menține, ai o ramura care conține cea mai recentă versiune de cod pentru versiunea asta.

    O altă utilizare de sucursale este pentru caracteristici. Acest lucru este în cazul în care ai ramură a trunchiului (sau unul de eliberare ramuri) și de a lucra pe o caracteristică nouă în izolare. Odată ce funcția este finalizată, puteți merge înapoi și scoateți ramură.

  • portbagaj/ - versiune de dezvoltare, în curând să fie de 1,2
  • sucursale/1.1 - viitoare 1.1.0 de presă
  • sucursale/ui-rescrie - caracteristică experimental ramură Ideea aceasta este atunci când aveți're de lucru pe ceva perturbator (care ar rezista sau interfera cu alte persoane de la a face munca lor), ceva experimental (care nu poate face chiar și în), sau eventual doar ceva care durează o perioadă lungă de timp (și're frică, dacă deține un 1.2 de presă atunci când're gata pentru a filialei 1.2 din portbagaj), o puteți face în mod izolat, în ramură. În general, vă păstrați până la curent cu portbagaj prin fuzionarea modificări în ea tot timpul, ceea ce face mai ușor pentru a re-integra (merge înapoi la portbagaj) când're a terminat.

    De asemenea, rețineți, versionare schema am folosit aici este doar unul din multe. Unele echipe ar face fix bug/versiuni de întreținere 1.1, 1.2, etc., și schimbări majore ca 1.x, 2.x, etc. Utilizarea de aici este la fel, dar s-ar putea numi creanga "1" sau "1.x" în loc de "1.0" sau "1.0.x". (O parte, versiunilor semantic este un bun ghid cu privire la modul de a face numere de versiune).

Comentarii (7)

În plus față de ce Nick-a spus că pot afla mai multe la Flux Linii: Ramificare a Modelelor de Paralele de Dezvoltare de Software

În această cifră "principal" este portbagajul, rel1-activita este o ramură și 1.0 este o etichetă.

Comentarii (4)

În general (instrument agnostic vedere), o sucursală este mecanismul utilizat pentru dezvoltarea în paralel. Un CSM poate fi de la 0 la n ramuri. Subversiune a 0.

  • Portbagaj este o ramură principală recomandate de Subversiune, dar sunt în nici un fel obligat să-l creeze. Ai putea spune 'principal' sau 'comunicate de', sau nu au deloc!

  • Sucursală reprezintă un efort de dezvoltare. Niciodată nu ar trebui să fie numit după o resursă (ca 'vonc_branch'), dar după:

  • un scop 'myProject_dev' sau 'myProject_Merge'
  • o elibereze perimetrul 'myProjetc1.0_dev'sau myProject2.3_Merge' sau 'myProject6..2_Patch1'...
  • Tag este un instantaneu de fișiere, în scopul de a obține cu ușurință înapoi la stat. Problema este că tag-ul și de ramură este aceeași în Subversiune. Și mi-ar recomanda cu siguranta paranoic abordare:

    puteți folosi unul de control al accesului script-uri furnizate cu Subversion pentru a împiedica pe oricine de la a face ceva dar crearea de noi exemplare în tag-uri de zonă.

Un tag este definitivă. Conținutul său ar trebui să se schimbe niciodată. NICIODATĂ. Vreodată. Ai uitat o linie în nota de presă? Creați o etichetă nouă. Învechite sau elimina pe cea veche.

Acum, am citit o mulțime de lucruri despre "unirea înapoi și astfel în astfel de și astfel de ramuri, apoi în cele din urmă în portbagaj branch". Asta se numeste merge flux de lucru și nu este nimic obligatoriu aici. Nu este pentru că aveți un trunchi de ramură have să fuzioneze back nimic.

Prin convenție, portbagaj ramură poate reprezenta stadiul actual de dezvoltare, dar asta este pentru un simplu secvențială proiect, care este un proiect care are:

  • nu 'in avans' de dezvoltare (pentru pregătirea următoarea versiune implicând astfel de modificări care nu sunt compatibile cu curent 'trunchi' de dezvoltare)
  • nu masiv refactoriz arii (pentru testarea unui nou tehnice alegere)
  • nu pe termen lung de întreținere de la o versiune anterioară

Deoarece cu unul (sau toate) dintre cei scenariu, tu du-te patru 'trunchiuri', patru 'evoluțiile actuale', și nu tot ce faci în acele dezvoltarea în paralel va trebui neapărat să fie unit în 'trunchi'.

Comentarii (1)

În SVN o etichetă și filiala sunt foarte similare.

Tag = o anumită felie în timp, de obicei folosit pentru emisiile

Sucursală =, de asemenea, o anumită felie în momentul în care dezvoltarea poate continua, utilizat de obicei pentru marile versiunea 1.0, 1.5, 2.0, etc, atunci când te elibera tag ramura. Acest lucru vă permite să continue să sprijine o producție de eliberare în timp ce se deplasează înainte cu rupere modificări în portbagaj

Portbagaj = dezvoltarea spațiu de lucru, acest lucru este în cazul în care toate de dezvoltare ar trebui să se întâmple, și apoi schimbă fuzionat înapoi de la sucursala de presă.

Comentarii (0)

Ei nu't într-adevăr avea niciun act de sens. Un folder este un folder la SVN. Acestea sunt în general acceptată mod de organizare a proiectului.

  • Trunchiul este în cazul în care vă păstrați linia principală de developmemt. Ramura dosarul este în cazul în care s-ar putea crea, de asemenea, ramuri, care sunt greu de explicat într-un scurt post.

  • O ramură este o copie a unui subset de proiect care trebuie să lucrezi separat de portbagaj. Poate l's pentru experimente care ar putea să nu meargă nicăieri, sau poate l's pentru următoarea versiune, care va fuziona mai târziu înapoi în portbagaj atunci când acesta devine stabil.

  • Etichetele de folder este pentru crearea de etichetat exemplare de depozit, de obicei, la eliberarea puncte de control.

Dar cum am spus, la SVN, un dosar este un dosar. "sucursală", "trunchi" și eticheta sunt doar o convenție.

Am'm folosind cuvântul 'copia' din belșug. SVN nu't, de fapt, a face o copie de lucruri în depozit.

Comentarii (0)

La portbagaj este dezvoltarea linia care deține cele mai recente codul sursă și caracteristici. Acesta ar trebui să aibă cele mai recente bug fixat în ea, precum și cele mai recente caracteristici adăugate la proiect.

La sucursale sunt de obicei folosite pentru a face ceva din portbagaj (sau altă linie de dezvoltare) care altfel ar pauză construi. Noile caracteristici sunt adesea construite într-o ramură și apoi îmbinate înapoi în portbagaj. Ramuri de multe ori conține cod care nu sunt neapărat aprobate pentru dezvoltare linie ramificată de la. De exemplu, un programator ar putea incerca o optimizare pe ceva într-o ramură și doar merge înapoi în dezvoltarea linia dată de optimizare este satisfăcătoare.

La categorie sunt instantanee de depozit la un anumit moment. Nu pentru dezvoltare ar trebui să apară pe acestea. Ele sunt cel mai adesea utilizate pentru a lua o copie a ceea ce a fost eliberat de la un client, astfel încât să puteți avea cu ușurință acces la ceea ce un client este folosind.

Aici's un link la un ghid foarte bun pentru centrale de tranzacții:

Articolele din Wikipedia sunt, de asemenea, în valoare de lectură.

Comentarii (0)

Acum, ca's lucru despre dezvoltarea de software, nu's nici cunoștințe despre nimic, toată lumea pare să aibă propria lor cale, dar care's, pentru că este o disciplină relativ tânără, oricum.

Aici's simplu mod simplu,

portbagaj - portbagaj director conține cele mai actuale, aprobate, și a fuzionat corpului de muncă. Contrar a ceea ce mulți au mărturisit, portbagajul meu este doar pentru curate, îngrijite, aprobat de muncă, și nu o zonă de dezvoltare, ci mai degrabă o zona de eliberare.

La un moment dat în timp, atunci când portbagajul pare gata să-i elibereze, atunci este etichetat și eliberat.

sucursale - ramurile director conține experimentele și lucrările în curs de desfășurare. Lucra sub o ramură rămâne acolo până când este aprobat pentru a fi îmbinate în portbagaj. Pentru mine, aceasta este zona unde toate lucrările se face.

De exemplu: nu pot fi o iteratie-5 ramura pentru o a cincea rundă de dezvoltare pe produs, poate o prototip-9 ramura pentru o nouă rundă de experimente, și așa mai departe.

*etichete - etichete director conține instantanee a aprobat ramuri și trunchi de presă. Ori de câte ori o sucursală este aprobat pentru a merge în portbagaj, sau o eliberare este fabricat din portbagaj, o imagine a aprobat ramură sau trunchi de presă este realizat în tag-uri.

Cred cu tag-uri pot sări înainte și înapoi prin timp pentru puncte de interes destul de ușor.

Comentarii (0)

Am gasit un tutorial cu privire la SVN când m-am uitat la site-ul autorul a OpenCV 2 Viziune de Calculator de Programare a aplicațiilor de Bucate și m-am gândit să le împărtășesc.

El are un tutorial despre cum să folosiți SVN și ce fraze 'trunchi', 'eticheta' si 'branch' sa spun.

Citat direct din tutorial:

versiunea curentă a software-ului de proiect, pe care echipa ta este în prezent de lucru este de obicei situat sub un director numit portbagaj. Ca proiectul evoluează, dezvoltatorul actualizări versiune fix bug-uri, adăuga noi caracteristici) și să prezinte schimbările lui în acel director.

La un moment dat în timp, poate doriți să înghețe o versiune și captura o imagine a software-ului ca acesta este în acest stadiu de dezvoltare. Aceasta corespunde, în general, versiunile oficiale de software, de exemplu, cele pe care le va oferi pentru clienții dumneavoastră. Aceste instantanee sunt situate sub categorie director de proiect.

în cele din Urmă, este de multe ori util pentru a crea, la un moment dat, o nouă linie de dezvoltare pentru software-ul dumneavoastră. Acest lucru se întâmplă, de exemplu, atunci când doriți pentru a testa o alternativă de implementare în care aveți de a modifica software-ul dvs., dar nu doriți să-și prezinte aceste modificări la proiectul principal până când vă decideți dacă să adopte o soluție nouă. Echipa principala, apoi poate continua să lucreze la proiect în timp ce alte producător de muncă pe prototip. Te-ar pune aceste noi linii de dezvoltare a proiectului sub un director numit sucursale.

Comentarii (0)

Unul dintre motivele pentru care toată lumea are o definiție ușor diferită este pentru Subversiune implementează zero suport pentru ramurile și tag-uri. Subversiune spune de fapt că: Ne-am uitat la full-featured ramuri și tag-uri în alte sisteme și nu le-am găsit utile, așa că nu a pus în aplicare nimic. Doar a face o copie într-un nou director cu un nume convenția * în loc. Apoi, desigur, toată lumea este liber pentru a fi ușor diferite convenții. Pentru a înțelege diferența dintre o real eticheta și o copie simpla + convenție de denumire a se vedea Wikipedia Subversiune tag-uri & ramuri*.

Comentarii (0)

Portbagaj director este directorul in care ai're, probabil cel mai familiar cu, deoarece este folosit pentru a organiza cele mai recente modificări. Principala ta codebase ar trebui să fie în portbagaj.

Ramurile director este pentru deținerea crengi, oricare ar fi ele.

Tag-uri director este, practic, pentru marcarea unui anumit set de fișiere. Puteți face acest lucru pentru lucruri cum ar fi comunicate, în cazul în care vrei "1.0" să fie aceste fișiere la aceste revizuiri și "1.1" să fie aceste fișiere la aceste revizii. De obicei nu't modifica tag-uri după ce au're făcut. Pentru mai multe informații despre tag-uri, a se vedea Capitolul 4. Ramificare și Fuzionarea (în Version Control cu Subversiune).

Comentarii (0)

Tag = definite felie în timp, de obicei folosit pentru emisiile

Cred că acest lucru este ceea ce de obicei înseamnă de "eticheta". Dar în Subversiune:

nu Au't într-adevăr avea niciun act de sens. Un folder este un dosar la SVN.

care mi se pare destul de confuz: o revizuire a sistemului de control că nu știe nimic despre sucursale sau tag-uri. De la o implementare punct de vedere, cred că Subversiune mod de a crea "copii" este foarte inteligent, dar ca eu să știu despre asta este ceea ce am'd sun o permeabil abstractizare.

Sau poate m-am'am fost doar folosind CV prea mult timp.

Comentarii (1)

Cred că o parte din confuzia vine de la diferența dintre conceptul de tag-ul și punerea în aplicare în SVN. La SVN un tag este o ramură care este o copie. Modificarea tag-uri este considerat greșit și de fapt instrumente, cum ar fi TortoiseSVN va avertiza dacă încercați să modificați ceva cu ../categorie/.. în cale.

Comentarii (0)

Am'm nu sunt sigur ce - 'eticheta', dar branch este destul de sursă comună de control concept.

Practic, o ramură este un mod de a lucra pe modificările la codul fără a afecta portbagaj. Presupunem că doriți să adăugați o caracteristică nouă, care's destul de complicat. Vrei să fii capabil de a verifica în schimbările ce le face, dar nu't vrei să afecteze trunchiului până când're face cu funcția.

În primul rând aveți'd a crea o sucursală. Aceasta este de fapt o copie din portbagaj ca-de când ați făcut ramură. Te'd apoi face toate munca ta în ramură. Orice modificări făcute în ramura don't afecta portbagaj, portbagaj este încă ușor de utilizat, permițându-le celorlalți să continue să lucreze acolo (ca face rezolvări ale unor probleme mici sau accesorii). Odată ce caracteristică se face'd integra ramura înapoi în portbagaj. Acest lucru s-ar muta toate modificările de la ramură la portbagaj.

Există o serie de modele care oamenii o folosesc pentru sucursale. Dacă aveți un produs cu mai multe versiuni majore fiind suportate la o dată, de obicei, fiecare versiune ar fi o sucursală. Unde lucrez eu, avem un AC de ramură și o ramură de Producție. Înainte de a elibera codul nostru de asigurare a calității vom integra modificările QA ramură, apoi se lanseaza de acolo. Atunci când eliberarea de producție vom integra de la QA ramură la ramură de Producție, așa că am știu codul care rulează în producție este identic cu ceea ce QA testat.

Aici's Wikipedia pe ramuri, din moment ce probabil că explica lucrurile mai bine decât mine. :)

Comentarii (0)

Pentru cei familiarizați cu GIT, master în GIT este echivalent cu trunchiul în SVN.

Ramură și tag-ul are aceeași terminologie în ambele GIT, SVN.

Comentarii (0)

Portbagaj : După finalizarea fiecare sprint în agile am venit cu un parțial shippable produs. Aceste versiuni sunt păstrate în portbagaj.

Sucursale : Toate evoluțiile paralele coduri pentru fiecare curs sprint sunt păstrate în ramuri.

*Etichete : de Fiecare dată când lansa un parțial shippable produs un fel de versiune beta, vom face un tag pentru ea. Acest lucru ne dă codul care a fost disponibil la acel moment de timp, permițându-ne să ne întoarcem la acea stare, dacă este necesar, la un moment dat in timpul dezvoltarii.

Comentarii (1)