Manuals

Modely verziovania

Všetky systémy pre správu verzií musia vyriešiť rovnaký zásadný problém: ako systém umožní používateľom zdieľať informácie, ale zabráni im v náhodnom šliapnutí inému na nohu? Je až príliš ľahké, aby si užívatelia náhodne prepísali zmeny v úložisku.

Problém zdieľania súborov

Zvážte tento scenár: Predpokladajme, že máme dvoch spolupracovníkov, Harryho a Sally. Každý z nich sa rozhodne upraviť rovnaký súbor úložiska súčasne. Ak Harry najskôr uloží svoje zmeny do úložiska, je možné, že (o chvíľu neskôr) ich Sally mohla omylom prepísať svojou novou verziou súboru. Zatiaľ čo Harryho verzia súboru sa nestratí navždy (pretože si systém pamätá každú zmenu), všetky Harryho urobené zmeny nebudú prítomné v novšej verzii súboru Sally, pretože nikdy nevidela Harryho zmeny. Harryho práca je stále skutočne stratená - alebo prinajmenšom chýba v najnovšej verzii súboru - a pravdepodobne náhodne. To je iste tá situácia, ktorej sa chceme vyhnúť!

Obrázok 2.2. Problém, ktorému sa treba vyhnúť

Problém, ktorému sa treba vyhnúť

Riešenie Zamknúť-Upraviť-Odomknúť

Mnoho systémov na správu verzií používa model zamknúť-upraviť-odomknúť na riešenie tohto problému, čo je veľmi jednoduché riešenie. V takomto systéme úložisko umožňuje zmeniť súbor naraz iba jednej osobe. Najprv musí Harry zamknúť súbor, skôr ako v ňom bude môcť robiť zmeny. Zamknutie súboru je ako požičanie si knihy z knižnice; ak Harry zamkol súbor, potom Sally v ňom nemôže robiť žiadne zmeny. Ak sa pokúsi zamknúť súbor, úložisko zamietne požiadavku. Jediné, čo môže urobiť, je prečítať si súbor a počkať, kým Harry dokončí svoje zmeny a uvoľní svoj zámok. Keď Harry odomkne priečinok, jeho úkon je ukončený a teraz ho môže Sally zamknúť a upraviť.

Obrázok 2.3. Riešenie Zamknúť-Upraviť-Odomknúť

Riešenie Zamknúť-Upraviť-Odomknúť

Problémom modelu zamknúť-upraviť-odomknúť je, bohužiaľ je trochu obmedzújci a často vedie k odradeniu užívateľov:

  • Zamknutie môže spôsobiť administratívne problémy. Harry niekedy zamkne súbor a potom na neho zabudne. Medzitým, pretože Sally stále čaká na úpravu súboru, má zviazané ruky. A potom ide Harry na dovolenku. Teraz musí Sally získať správcu, aby uvoľnil Harryho zámok. Situácia nakoniec spôsobí veľa zbytočného odkladu a straty času.

  • Uzamknutie môže spôsobiť zbytočnú vytváranie sérií. Čo ak Harry upravuje začiatok textového súboru a Sally chce jednoducho upraviť koniec rovnakého súboru? Tieto zmeny sa vôbec neprekrývajú. Mohli ľahko upravovať súbor súčasne a za predpokladu, že zmeny budú správne zlúčené, nepríde k nijakému veľkému poškodeniu. V tejto situácii nie je potrebné, aby sa striedali.

  • Zamknutie môže vytvoriť falošný pocit bezpečia. Predstierajte, že Harry uzamkne a upraví súbor A, zatiaľ čo Sally súčasne zamkne a upraví súbor B. Predpokladajme však, že A a B závisia jeden od druhého a zmeny, ktoré sú v nich vykonané, sú významovo nekompatibilné. Zrazu A a B už nespolupracujú. Uzamykací systém bol bezmocný, aby zabránil problémom - napriek tomu nejako poskytol pocit falošnej bezpečnosti. Pre Harryho a Sally je ľahké si predstaviť, že uzamknutím súborov každý z nich začína bezpečnú izolovanú úlohu a tak im bráni v tom, aby už na začiatku diskutovali o svojich nekompatibilných zmenách.

Riešenie Kopírovať-Upraviť-Zlúčiť

Subversion, CVS a ďalšie systémy na správu verzií používajú modul kopírovať-upraviť-zlúčiť ako alternatívu k zamykaniu. V tomto modeli klient každého používateľa načíta úložisko a vytvára osobné údaje pracovnej kópie súboru alebo projektu. Používatelia potom pracujú paralelne a upravujú svoje súkromné kópie. Nakoniec sa súkromné kópie zlúčia do novej finálnej verzie. Systém správy verzií často pomáha pri zlúčení, ale za správne uskutočnenie je v konečnom dôsledku zodpovedný človek.

Tu je príklad. Povedzme, že Harry a Sally vytvoria pracovné kópie toho istého projektu skopírované z úložiska. Pracujú súčasne a vykonávajú zmeny v rovnakom súbore A v rámci svojich kópií. Sally najskôr uloží svoje zmeny do úložiska. Keď sa Harry pokúsi svoje zmeny uložiť neskôr, úložisko ho informuje, že jeho súbor A je zastaralý. Inými slovami, tento súbor A v úložisku sa od posledného skopírovania nejako zmenil. Harry teda požiada svojho klienta o zlúčenie akékoľvek nových zmien z úložiska do jeho pracovnej kópie súboru A. Je pravdepodobné, že sa zmeny Sally nekryjú s tými jeho; takže akonáhle má obe sústavy zmien integrované, uloží svoju pracovnú kópiu späť do úložiska.

Obrázok 2.4. Riešenie Kopírovať-Upraviť-Zlúčiť

Riešenie Kopírovať-Upraviť-Zlúčiť

Obrázok 2.5. ...pokračovanie Kopírovať-Upraviť-Zlúčiť

...pokračovanie Kopírovať-Upraviť-Zlúčiť

Ale čo keď sa zmeny urobené Sally kryjú sa s Harryho zmenami? Čo potom? Táto situácia sa nazýva konflikt a zvyčajne to nie je veľký problém. Keď Harry požiada svojho klienta, aby zlúčil najnovšie zmeny v úložisku do svojej pracovnej kópie, jeho kópia súboru A je nejakým spôsobom označená ako konfliktná: bude schopný vidieť obidve sady konfliktných zmien, medzi ktorými si môže ručne vybrať. Softvér nedokáže automaticky vyriešiť konflikty; iba ľudia sú schopní pochopiť a urobiť potrebné inteligentné rozhodnutia. Keď Harry ručne vyrieši kryjúce sa zmeny (možno diskusiou o konflikte so Sally!), môže bezpečne uložiť zlúčený súbor späť do úložiska.

Model kopírovania, úpravy a zlúčenia môže znieť trochu chaoticky, ale v praxi beží mimoriadne hladko. Používatelia môžu pracovať paralelne a nikdy na seba nečakať. Keď pracujú na rovnakých súboroch, ukázalo sa, že väčšina ich súbežných zmien sa vôbec neprekrýva; konflikty sú zriedkavé. A čas potrebný na riešenie konfliktov je oveľa menší ako čas stratený uzamykacím systémom.

Nakoniec to všetko závisí od jedného zásadného faktora: komunikácie používateľov. Keď používatelia zle komunikujú, narastajú syntaktické aj konflikty významu. Žiadny systém nemôže prinútiť používateľov dokonale komunikovať a žiadny systém nedokáže zistiť konflikty významu. Takže nemá zmysel nechať sa opájať falošným prísľubom, že uzamykací systém nejako zabráni konfliktom; v praxi sa zdá, že blokovanie brzdí produktivitu viac ako čokoľvek iné.

Existuje jedna bežná situácia, keď model uzamknutia, úpravy a odomknutia vyjde lepšie, a to je prípad, keď máte nezmeniteľné súbory. Napríklad ak vaše úložisko obsahuje niektoré grafické obrázky a dvaja ľudia ho menia súčasne, neexistuje žiadny spôsob, ako by sa tieto zmeny spojili. Harry alebo Sally prídu o svoje zmeny.

Čo robí Subversion?

Subversion štandardne používa riešenie kopírovanie-úprava-zlúčenie a v mnohých prípadoch je to všetko, čo kedy budete potrebovať. Od verzie 1.2 však Subversion podporuje aj zamykanie súborov, takže ak máte nezmeniteľné súbory alebo ak vás vedenie jednoducho prinúti k politike uzamknutia, Subversion bude stále poskytovať potrebné funkcie.

TortoiseSVN homepage