This is an in-progress translation.
To help translate the book, please fork the book at GitHub and push your contributions.

За контрола на верзиите

Што е контрола на верзии, и зошто би требало да се грижите? Контрола на верзии е систем кој што ги бележи промените во една датотека или во група од датотеки со текот на времето така што подоцна би можеле да се вратите на одредена верзија. За примерите во оваа книга ќе користите изворен код од софтвер како датотеки кои што ќе бидат верзионирани, инаку истото можете да го правите со било каков тип на датотеки.

Ако си графички дизајнер и сакаш да ја сочуваш секоја верзија од сликата или нацртот (секако дека би сакал), тогаш користење на Систем за Контрола на Верзии (VCS од англиски Version Control System) е разумен начин да се постигне тоа. Тој ви овозможува одредени датотеки да ги вратите во претходна состојба, целиот проект да го вратите во претходна состојба, да ги споредите измените кои што се направени во одреден временски период, да видите кој последен менувал и дали тоа предизвикало некој проблем, кој и кога вовел неправилност итн. Користење на VCS генерално значи дури и да уништите или изгубите датотеки, секогаш може лесно да ги вратите назад. Дополнително, сето тоа го добивате за сосема мал напор.

Локални системи за контрола на верзии

Многу луѓе како систем за верзионирање го користат методот на копирање на датотеките во друга папка (можеби папка со датум во името). Овој пристап е многу вообичаен затоа што е едноставен, но неверојатно многу е склон на грешки. Многу е лесно да заборавите во која папка се наоѓате моментално, и по грешка да запишете или да пребришете датотека.

За да се справат со овој проблем, програмерите одамна развиле локални VCS-и кои што имале едноставна база во која што се бележеле сите промени во датотеките кои што биле ставен под системот за контрола на верзиите (види Сл 1-1).


Слика 1-1. Дијаграм на локален систем за контрола на верзиите.

Еден од попопуларните VCS алатки бил системот наречен rcs, кој што и денеска сеуште се користи. Дури и популарниот Mac OS X оперативен систем ја вклучува наредбата rcs кога ќе инсталирате развојни алатки. Оваа алатка работи на тој начин што чува серија од закрпи (разлики помеѓу датотеките) од една до друга промена во специјален формат на дискот; понатаму на тој начин може да ја добие секоја состојба што ја имала датотеката во одредено време со додавање на закрпите.

Централизирани системи за контрола на верзиите

Следен голем проблем со кој што се судриле луѓето е неможноста да колаборираат со програмерите на други системи. За да се разреши овој проблем биле развиени Централизи-рани Системи за Контрола на Верзиите (CVCSs - Centralized Version Control Systems). Овие системи, како што се CVS, Subversion, и Perforce, имаат централен сервер кој што ги содржи сите верзионирани датотеки, и голем број на клиенти кои што ги менуваат или прегледуваат датотеките од тоа централно место. Многу години тоа беше стандард за контрола на верзиите (види Слика 1-2).


Слика 1-2. Дијаграм на централизиран систем за контрола на верзиите.

Ваквата поставка нуди многу предности, особено во однос на локалните VCS-и. На пример, секој во одредена мерка знае што работат другите на проектот. Администраторите фино може да подесат кој што може да работи, и далеку е поедноставно да се администрира CVCS отколку да се администрираат базите на секој клиент.

Но, ваквата поставка исто така има и сериозни недостатоци. Најочигледен е тоа што постои една точка која доколку откаже целиот систем ќе престане да функционира, а таа точка е централниот сервер. Ако тој сервер биде исклучен еден час на пример, во тој час никој воопшто нема да може да колаборира, ниту пак да ги зачува верзионираните промени на она на што работи. Доколку хард-дискот се корумпира, и доколку не постои соодветен бекап, тогаш апсолутно се е загубено - целосниот историјат на проектот, освен копиите кои што луѓето случајно би ги имале на локалните компјутери. Локалните VCS системи се подложни на истите проблеми - доколку целосната историја на проектот е на едно место, тогаш ризикувате да загубите се.

Дистрибуирани системи за контрола на верзиите

Тука стапуваат на сцена Дистрибуираните Системи за Контрола на Верзиите (DVCSs - Distributed Version Control Systems). Кај DVCS (како што е Git, Mercurial, Bazaar или Darcs), клиентите не ја прегледуваат само последната состојба од датотеките туку прават целосна копија од репозиторито. Така, доколку некој од серверите биде уништен, било која копија од клиентите може да биде земена за да се реставрира серверот. Секое прегледување е целосен бекап на сите податоци (види Слика 1-3).


Слика 1-3. Дијаграм на дистрибуирани системи за контрола на верзиите.

Дополнително, многу од овие системи одлично се снаоѓаат при работа со повеќе оддале-чени репозиторија, така што можете да колаборирате со различни групи луѓе на различни начини истовремено во рамките на ист проект. Тоа ви овозможува да поставите повеке типови на начини на работа кои што не се возможни во централизираните системи, како што се хиерархискиот модели.