Všetky systémy správy verzií musia vyriešiť základný problém: ako systém umožní užívateľom zdieľať informácie, ale zabráni aby si stúpali po nohách? Je príliš jednoduché, aby si užívatelia v úložisku omylom navzájom prepisovali vykonané zmeny.
Prestavte si takúto situáciu: predpokladajme, že mame dvoch spolupracovníkov: Harry a Sally. Obidvaja sa rozhodnú upraviť ten istý súbor úložiska v jednom čase. Ak Harry odovzdá zmeny ako prvý potom je možné, že (o chvíľu) Sally ich môže omylom prepísať jej novou verziu súboru. Napriek tomu, že Harry-ho verzia nebude stratená, (pretože systém si pamätá každú zmenu), žiadna Harry-ho zmena nebude v Sally-nej novej verzií súboru, pretože nikdy nevidela Harry-ho zmeny. Harry-ho práca je teda efektívne stratená - alebo aspoň chýbajúca v poslednej verzií súboru - a to pravdepodobne omylom. Toto je určite situácia, ktorej sa chceme vyhnúť!
Many version control systems use a lock-modify-unlock model to address this problem, which is a very simple solution. In such a system, the repository allows only one person to change a file at a time. First Harry must lock the file before he can begin making changes to it. Locking a file is a lot like borrowing a book from the library; if Harry has locked a file, then Sally cannot make any changes to it. If she tries to lock the file, the repository will deny the request. All she can do is read the file, and wait for Harry to finish his changes and release his lock. After Harry unlocks the file, his turn is over, and now Sally can take her turn by locking and editing.
Problémom modelu zamknúť-upraviť-odomknúť je, žel je trochu reštriktívny a často vedie k zastaveniu užíateľov:
Zamykanie môže spôsobiť administratívne problémy. Harry zamkne súbor a zabudne na to. Medzi tý Sally stále čaká, aby mohla upravovať súbor a má zviazané ruky. Potom Harry odíde na dovolenku. Sally teda musí požiadať administrátora aby uvoľnil Harry-ho zámok. Situácia končí nežiadaným oneskorením a stratou času.
Zamykanie môže spôsobiť nežiadanú serializáciu. Čo ak Harry upravuje začiatok textového súboru Sally chce jednoducho upraviť koniec súboru v tom istom čase? Tieto zmeny sa neprekrývajú. Mohli by jednoducho a bez škody upravovať súbor súčasne, predpokladajúc, že by boli zmeny správne zlúčené. Nie je potreba aby v tejto situácií získavali ťah.
Zamykanie môže vyvolať falošný dojem zabezpečenia. Predstierajme, že Harry zamyká a upravuje súbor A, zatiaľ čo Sally simultánne zamyká a upravuje súbor B. Ale predstavme si, že A a B závisia jeden na druhom a zmeny urobené v každom z nich sú významne nekompatibilné. Náhle A a B spolu nespolupracujú. Zamykací systém bol bezmocný predísť tomuto problému - hoci nejak poskytoval dojem falošného zabezpečenia. Pre Harryho a Sally je jednoduché predstaviť si, že pokiaľ uzamknú súbory, obidva začnú bezpečnú, izolovanú úlohu a teda im to včas zabráni v diskutovaní ich nekompatibilných zmien.
Subversion, CVS a ostatné systémy správy verzií používajú model kopírovať-meniť-zlúčiť ako alternatívu k zamykaniu. V tomto modeli, každý užívateľov klient načíta úložisko a vytvorí osobnú pracovnú kópiu súboru alebo projektu. Užívatelia preto môžu pracovať paralelne, upravovať ich súkromné kópie. Nakoniec sú súkromné kópie zlúčené dokopy do novej, finálnej verzie. Systém správy verzií často pomáha so zlučovaním, ale koniec koncov človek je zodpovedný, aby všetko prebehlo bezchybne.
Tu máme príklad. Povedzme že Harry a Sally vytvorili každý pracovné kópie toho istého projektu, zkopírovaného z úložiska. Pracujú súbežne a urobili zmeny do toho istéhu súboru A vo svojich kópiách. Sally uložila svoje zmeny do úložiska ako prvá. Keď Harry skúša uložiť jeho zmeny neskôr, úložisko ho informuje, že jeho súbor A je neplatný. Inými slovami oznamuje, že súbor A v úložisku bol nejakým spôsobom zmenený odkedy ho naposledy kopíroval. Preto Harry požiada svojho klienta zlúčiť všetky nové zmeny z úložiska do jeho pracovnej kópie súboru A. Je pravdepodobné, že sa zmeny, ktoré urobila Sally nebudú prekrývať s jeho vlastnými; takže keď už Harry integroval obidve zmeny, uloží svoju pracovnú kópiu naspäť do úložiska.
But what if Sally's changes do overlap with Harry's changes? What then? This situation is called a conflict, and it's usually not much of a problem. When Harry asks his client to merge the latest repository changes into his working copy, his copy of file A is somehow flagged as being in a state of conflict: he'll be able to see both sets of conflicting changes, and manually choose between them. Note that software can't automatically resolve conflicts; only humans are capable of understanding and making the necessary intelligent choices. Once Harry has manually resolved the overlapping changes (perhaps by discussing the conflict with Sally!), he can safely save the merged file back to the repository.
Kopírovať-upraviť-zlúčiť model môže vyzerať trochu chaotický, ale v praxi, pracuje extrémne hladko. Užívatelia môžu pracovať paralelne, nemusia čakať jeden na druhého. Keď pracujú na tých istých súboroch, ukáže sa že sa väčšina ich súbežných zmien vôbec neprekrýva; konflikty sú zriedkavé. A množstvo času, ktoré zaberie na vyriešenie konfliktov je zďaleka menšie než čas stratený zamykacím systémom.
Na koniec, všetko sa zredukuje na jediný kritický faktor: komunikácia užívateľov. Ak užívatelia zle komunikujú, oba, syntaktické a významové konflikty narastajú. Žiadny systém prinútí užívateľov perfektne komunikovať a taktiež môže odhaliť významové konflikty. Takže nemá význam si falošne nahovoriť, že systém zamykania predíde nejako konfliktom; v praxi, zamykanie zabraňuje produktivite viac než čokoľvek iné.
Avšak je jedna spoločná situácia kde zamknúť-upraviť-odomknúť model vychádza lepšie a to tam, kde sú nezlúčiteľné súbory. Napríklad ak vaše úložisko obsahuje nejaké grafické obrazy a dvaja ľudia zmenia obraz v tom istom čase, je nemožné aby boli tieto zmeny spolu zlúčené. Obaja, Harry alebo Sally stratia svoje zmeny.
Subversion používa kopírovať-upraviť-zlúčiť riešenie ako predvolené a v mnohých prípadoch je toto jediné, čo budete potrebovať. Avšak, od Verzie 1.2, Subversion tiež podpporuje zamykanie súboru, takže ak máte nezlúčiteľné súbory alebo ak ste jednoducho nútený manažmentom zamykať, Subversion bude stále poskytovať funkcie, ktoré potrebujete.