Ustvarjanje vej/oznak

Ena od zmožnosti sistemov za nadzor različic je tudi možnost izoliranja sprememb v svojo razvojno linijo. Linija se prikaže kot veja. Veje se pogosto uporabljajo za preizkušanje novih stvari, da ne bi obremenjevali glavne razvojne linije z napakami prevajalnika in hrošči. Ko je nova zmožnost dovolj stabilna, se razvojna veja spoji nazaj v glavno vejo.

Še ena lastnost sistemov za nadzor različic je možnost označevanja določenih revizij (n. pr. verzije izdaje), tako da lahko kasneje ponovno zgradite izdajo ali nastavite razvojno okolje. Ta proces se imenuje označevanje.

Subversion nima posebnih ukazov za ustvarjanje vej ali oznak, ampak uporablja takoimenovane poceni kopije. Poceni kopije so podobne povezavam (hard links) v sistemu Unix, kar pomeni, da se namesto ustvarjanja kopije skladišča naredi notranja povezava, ki kaže na določeno drevo/revizijo. Zato je ustvarjanje vej in oznak zelo hitro, hkrati pa ne zavzema skoraj nobenega dodatnega prostora v skladišču.

Ustvarjanje veje ali oznake

Če ste projekt uvozili v priporočeno sturkturo map, je ustvarjanje vej ali oznak zelo preprosto:

Slika 4.54. Okno za za ustvarjanje veje/oznake

Okno za za ustvarjanje veje/oznake


Izberite mapo v delovni kopiji, ki jo želite prekopirati v vejo ali oznako, nato pa izberite TortoiseSVNVeja/oznaka....

The default destination URL for the new branch will be the source URL on which your working copy is based. You will need to edit that URL to the new path for your branch/tag. So instead of

http://svn.collab.net/repos/ProjectName/trunk
      

you might now use something like

http://svn.collab.net/repos/ProjectName/tags/Release_1.10
      

If you can't remember the naming convention you used last time, click the button on the right to open the repository browser so you can view the existing repository structure.

intermediate folders

When you specify the target URL, all the folders up to the last one must already exist or you will get an error message. In the above example, the URL http://svn.collab.net/repos/ProjectName/tags/ must exist to create the Release_1.10 tag.

However if you want to create a branch/tag to an URL that has intermediate folders that don't exist yet you can check the option Create intermediate folders at the bottom of the dialog. If that option is activated, all intermediate folders are automatically created.

Note that this option is disabled by default to avoid typos. For example, if you typed the target URL as http://svn.collab.net/repos/ProjectName/Tags/Release_1.10 instead of http://svn.collab.net/repos/ProjectName/tags/Release_1.10, you would get an error with the option disabled, but with the option enabled a folder Tags would be automatically created, and you would end up with a folder Tags and a folder tags.

Sedaj morate izbrati vir kopiranja. Imate tri možnosti:

Revizija HEAD v skladišču

Nova veja se skopira neposredno v skladišču iz revizije HEAD. Prenos podatkov iz delovne kopije ni potreben, zato je ustvarjanje veje zelo hitro.

Določena revizija v skladišču

Nove veja se skopira neposredno v skladišču, vendar se lahko odločite za starejšo revizijo. To je uporabno, če ste prejšnji teden, ko ste naredili novo izdajo, pozabili kreirati oznako. Če se ne spomnite številke revizije, kliknite na gumb na desni in prikazalo se bo okno z dnevnikom revizij, od koder lahko izberete številko revizije. Iz delovne kopije se v skladišče ne prenašajo podatki, tako da je veja ustvarjena zelo hitro.

Delovna kopija

Nova veja je identična kopija krajevne delovne kopije. Če ste nekatere datoteke posodobili na starejšo revizijo, bodo te starejše revizije datotek prav tako skopirane na vejo. Seveda se lahko pri takšnem zahtevnem tipu oznake zgodi, da se podatki prenašajo iz delovne kopije v skladišče, če tam še ne obstajajo.

Če želite, da se vaša delovna kopija samodejno preklopi na novo ustvarjeno vejo, vklopite potrditveno polje Preklopi delovno kopijo na drugo vejo / oznako. Če želite to narediti, se najprej prepričajte, da vaša delovna kopija nima krajevnih sprememb. Če jih ima, potem bodo le-te spojene v delovno kopijo veje, ko naredite preklop.

If your working copy has other projects included with svn:externals properties, those externals will be listed at the bottom of the branch/tag dialog. For each external, the target path and the source URL is shown.

If you want to make sure that the new tag always is in a consistent state, check all the externals to have their revisions pinned. If you don't check the externals and those externals point to a HEAD revision which might change in the future, checking out the new tag will check out that HEAD revision of the external and your tag might not compile anymore. So it's always a good idea to set the externals to an explicit revision when creating a tag.

The externals are automatically pinned to either the current HEAD revision or the working copy BASE revision, depending on the source of the branch/tag:

Tabela 4.1. Pinned Revision

Copy SourcePinned Revision
Revizija HEAD v skladiščuexternal's repos HEAD revision
Določena revizija v skladiščuexternal's repos HEAD revision
Delovna kopijaexternal's WC BASE revision


externals within externals

If a project that is included as an external has itself included externals, then those will not be tagged! Only externals that are direct children can be tagged.

Če želite objaviti novo kopijo v skladišču, pritisnite gumb V redu. Ne pozabiti na dnevniški zapis. Ne pozabite, da se kopija ustvari znotraj skladišča.

Upoštevajte: če ne potrdite izbire za preklop nove veje na delovno kopijo, ustvarjanje vej in oznak nima vpliva na delovno kopijo. Tudi če vejo ustvarite iz delovne kopije, se spremembe objavijo na novi veji in ne na glavni veji, tako da je vaša delovna kopija še vedno lahko označena kot spremenjena (glede na glavno vejo).

Other ways to create a branch or tag

You can also create a branch or tag without having a working copy. To do that, open the repository browser. You can there drag folders to a new location. You have to hold down the Ctrl key while you drag to create a copy, otherwise the folder gets moved, not copied.

You can also drag a folder with the right mouse button. Once you release the mouse button you can choose from the context menu whether you want the folder to be moved or copied. Of course to create a branch or tag you must copy the folder, not move it.

Yet another way is from the log dialog. You can show the log dialog for e.g. trunk, select a revision (either the HEAD revision at the very top or an earlier revision), right click and choose create branch/tag from revision....

Prevzeti ali preklopiti...

... to (zares) ni vprašanje. Medtem ko prevzem prevzame vse datoteke iz izbrane veje v delovno kopijo, TortoiseSVNPreklopi... prenese le spremenjene podatke v delovno kopijo. Dobro za obremenitev omrežja in vaše potrpljenje :-)

Na voljo je več načinov, kako začnete delati z novo ustvarjeno vejo ali oznako. Lahko:

  • Uporabite ukaz TortoiseSVNPrevzem in ustvarite svež prevzem v prazno mapo. Prevzem lahko naredite na katerokoli lokacijo na svojem disku. Naredite lahko poljubno število prevzemov iz skladišča.

  • Preklopite delovno kopijo na novo ustvarjeno kopijo v skladišču. Izberite vrhnjo mapo projekta in iz kontekstnega menija uporabite TortoiseSVNPreklopi...

    V naslednjem pogovornem oknu vnesite naslov URL veje, ki ste jo ustvarili. Izberite radijski gumb Revizija HEAD in kliknite na gumb V redu. S tem ste delovno kopijo preklopili na novo vejo/oznako.

    Preklop, enako kot posodobitev, nikoli ne povozi krajevnih sprememb. Vse spremembe, ki ste jih naredili v delovni kopiji in še niso bile objavljene, bodo spojene, ko naredite preklop. Če tega ne želite, potem morate spremembe objaviti ali pa delovno kopijio povrniti na objavljeno revizijo (tipično HEAD).

  • Če želite delati na glavni in stranski veji, vendar ne želite delati svežih prevzemov, ki so časovno potratni, lahko naredite prevzem glavne veje, potem pa uporabite ukaz TortoiseSVNPreklopi..., s katerim delovno kopijo posodobite na izbrano vejo.

Slika 4.55. Okno za preklop

Okno za preklop


Čeprav Subversion ne razlikuje med oznakami in vejami, se pri pri tipični uporabi ta dva ukaza nekoliko razlikujeta.

  • Tags are typically used to create a static snapshot of the project at a particular stage. As such they are not normally used for development - that's what branches are for, which is the reason we recommended the /trunk /branches /tags repository structure in the first place. Working on a tag revision is not a good idea, but because your local files are not write protected there is nothing to stop you doing this by mistake. However, if you try to commit to a path in the repository which contains /tags/, TortoiseSVN will warn you.

  • Včasih morate narediti dodatne spremembe na izdaji, ki ste jo že označili. Pravilen postopek je, da ustvarite novo vejo iz oznake in vejo objavite. Nato na novi veji naredite potrebne spremembe in ustvarite novo oznako iz veje, n. pr. Verzija_1.0.1.

  • Če spremenite delovno kopijo, ustvarjeno iz veje, in jo objavite, gredo vse spremembe na novo vejo in ne na glavno vejo. Shranijo se le spremembe, nespremenjeni del pa ostane poceni kopija.