Modeli nadzora različic

Vsi sistemi nadzora različic morajo rešiti isto osnovno težavo: kako bo sistem omogočal souporabo informacij, hkrati pa preprečil, da bi si uporabniki skakali v zelje. Vse prelahko je povoziti spremembe ostalih uporabnikov v skladišču.

Težave souporabe datotek

Zamislite si naslednji scenarij: imamo dva sodelavca, Harryja in Sally. Odločita se, da bosta spremenjala isto datoteko iz skladišča. Če spremembe najprej shrani Harry, potem je možno, da Sally (čez nekaj trenutkov) pomotoma prepiše te spremembe s svojo novo različico datoteke. Harryjeva datoteka sicer ne bo izgubljena, saj si sistem zapomni vsako spremembo, ne bodo pa te spremembe prisotne v Sallyjini datoteki, saj sploh ne ve zanje. Harryjevo delo je tako kljub vsemu izgubljeno - oziroma vsaj ni na voljo v zadnji različici - in to po vsej verjetnosti po pomoti. Takšnim situacijam se želimo izogniti.

Slika 2.2. Težava, ki se ji je potrebno izogniti

Težava, ki se ji je potrebno izogniti

Rešitev zakleni-spremeni-odkleni

Veliko sistemov za nadzor različic uporablja model zakleni-spremeni-odkleni, kar predstavlja zelo enostavno rešitev problema. V takšnem sistemu lahko datoteko spreminja samo en uporabnik naenkrat. Pred spreminjanjem datoteke jo mora Harry zakleniti. Zaklepanje datoteke je podobno izposoji knjige v knjižnici; če Harry zaklene datoteko, potem Sally ne more narediti nobenih sprememb na tej datoteki. Če poskuša datoteko zakleniti, ji bo skladišče to onemogočilo. Datoteko lahko le bere in čaka, da jo bo Harry nehal urejati in sprostil zaklep. Potem ko Harry odklene datoteko, jo lahko zaklene Sally in jo začne urejati.

Slika 2.3. Rešitev zakleni-spremeni-odkleni

Rešitev zakleni-spremeni-odkleni

Model zakleni-spremeni-odkleni uporabnike omejuje in jih ovira pri delu:

  • Zaklepanje lahko povzroča skrbniške težave. Včasih Harry zaklene datoteko in nanjo pozabi. Medtem je Sally, ki želi spremeniti isto datoteko, prisiljena čakati. Harry gre na počitnice, Sally pa mora po pomoč k skrbniku sistema, da ji odklene datoteko. Takšna situacija povzroči precej nepotrebnih zamud in izgube časa.

  • Zaklepanje lahko povzroči nepotrebno delo eden za drugim. Harry popravlja začetni del datoteke, Sally pa želi popravljati zadnji del iste datoteke. Te spremembe se ne prekrivajo. Oba uporabnika bi lahko datoteko spreminjala sočasno brez posledic, pod pogojem, da bi spremembe pravilno spojila skupaj. Nobene potrebe ni, da v takšni situaciji delata eden za drugim.

  • Zaklepanje ustvarja lažen občutek varnosti. Predstavljajte si, da Harry zaklene in spreminja datoteko A, Sally pa hkrati zaklene in spreminja datoteko B. Recimo, da sta datoteki A in B odvisni ena od druge, in spremembe, narejene na posamezni datoteki, so semantično nezdružljive. Kar naenkrat datoteki A in B skupaj ne funkcionirata pravilno. Sistem zaklepanja je nemočen pri preprečevanju težave - hkrati pa ustvarja lažen občutek varnosti. Harry in Sally si mislita, da z zaklepanjem datotek začenjata varno, izolirano operacijo, kar povzroči, da se sploh ne pogovarjata o možni nezdružljivosti datotek.

Rešitev kopiraj-spremeni-spoji

Subversion, CVS, and other version control systems use a copy-modify-merge model as an alternative to locking. In this model, each user's client reads the repository and creates a personal working copy of the file or project. Users then work in parallel, modifying their private copies. Finally, the private copies are merged together into a new, final version. The version control system often assists with the merging, but ultimately a human being is responsible for making it happen correctly.

Poglejmo primer. Harry in Sally ustvarita delovni kopiji istega projekta, prenesenega iz skladišča. Delata istočasno in naredita spremembe v isti datoteki A v svojih delovnih kopijah. Sally prva shrani spremembe v skladišče. Ko Harry kasneje poskusi shraniti svoje spremembe, ga skladišče obvesti, da je njegova datoteka A zastarela. Z drugimi besedami: datoteka A se je od takrat, ko jo je Harry prevzel iz skladišča, spremenila. Zato Harry zahteva od svojega odjemalca, da nove spremembe v skladišču spoji z datoteko A v njegovi delovni kopiji. Mogoče se spremembe ne prepletajo. Ko ima obe verziji združeni, shrani datoteko v skladišče.

Slika 2.4. Rešitev kopiraj-spremeni-spoji

Rešitev kopiraj-spremeni-spoji

Slika 2.5. ...Kopiraj-spremeni-spoji (nadaljevanje)

...Kopiraj-spremeni-spoji (nadaljevanje)

Kaj pa, če se Sallyjine spremembe vseeno prekrivajo s Harryjevimi? Nastane sporna situacija, ki pa običajno ne povzroča problemov. Ko Harry zahteva od svojega odjemalca, naj spoji zadnje spremembe v delovno kopijo, je njegova datoteka A označena kot sporna: Harry bo lahko videl oba nabora spornih sprememb in imel možnost izbrati pravilne. Upoštevajte, da program ne more samodejno reševati sporov; samo ljudje smo sposobni razmišljati in narediti ustrezne inteligentne odločitve. Ko Harry ročno reši prekrivajoče se spremembe (mogoče se je ob tem moral celo posvetovati s Sally!), lahko varno shrani spojeno datoteko v skladišče.

Model kopiraj-spremeni-spoji se mogoče zdi nekoliko kompliciran, vendar se v praksi izkaže, da funkcionira zelo dobro. Uporabniki lahko delajo sočasno, nikoli jim ni potrebno čakati nekoga drugega. Izkaže se, da se v primerih, ko delajo na istih datotekah, večina sprememb ne prekriva. Spori so redki. In čas, ki ga uporabniki porabijo za reševanje sporov, je mnogo krajši, kot bi bila izguba časa zaradi sistema zaklepanja.

Na koncu pridemo do enega samega ključnega dejavnika: komunikacija med uporabniki. Kjer se uporabniki malo pogovarjajo, se poveča število sintaktičnih in semantičnih sporov. Noben sistem ne more prisiliti uporabnikov, da bi idealno komunicirali med sabo in noben sistem ne more zaznati semantičnih sporov. Torej nima nobenega smisla živeti v lažnem prepričanju, da bo sistem zaklepanja preprečil spore. V praksi se izkaže, da zaklepanje zmanjša produktivnost bolj kot karkoli drugega.

Obstaja pa primer, v katerem se model zakleni-spremeni-odkleni izkaže za boljšega in sicer pri datotekah, ki se jih ne da spajati. Na primer: če vaše skladišče vsebuje grafične datoteke in dva uporabnika naredita spremembe na isti datoteki naenkrat, se teh dveh sprememb ne da združiti. Eden od obeh uporabnikov bo spremembe izgubil.

Kaj naredi Subversion?

Subversion po privzetih nastavitvah uporablja model kopiraj-spremeni-spoji in v veliko primerih je to vse, kar potrebujete. Od različice 1.2 naprej pa Subversion podpira tudi zaklepanje datotek. Če torej delate na datotekah, ki se jih ne da spajati ali če ste takšen model prisiljeni uporabljati zaradi pravil, ki veljajo v vašem podjetju, vam Subversion ponuja možnosti, ki jih potrebujete.