Git
Chapters ▾ 2nd Edition

1.1 Почетак - О контроли верзије

Ово поглавље ће се бавити неким основним стварима о програму Гит. Почећемо уз кратка објашњења о томе како раде алати за контролу верзије, а онда ћемо прећи на то како подесити програм Гит да ради на систему који користите и на крају ћемо све то уклопити тако да можете почети са радом. На крају поглавља требало би да разумете зашто постоји програм Гит, зашто би требало да га користите и бићете спремни да све то спроведете у дело.

О контроли верзије

Шта је то „контрола верзије”, и зашто би вас то занимало? Контрола верзије је систем који памти промене фајла или скупа фајлова настале током времена и који вам омогућава да се касније вратите на одређене верзије. Као примере у овој књизи користићете изворни кôд софтвера као фајлове над којима се примењује контрола верзије, али у стварности овакав приступ би радио са скоро сваком врстом фајлова на рачунару.

Ако сте графички или веб дизајнер и желите да сачувате сваку верзију слике или макете (што је добра пракса), врло је мудра идеја користити систем за контролу верзије (Version Control System, VCS). Дозвољава вам да вратите фајлове на пређашње стање, да вратите читав пројекат на пређашње стање, да поредите измене током времена, да видите ко је последњи изменио нешто што би могло да буде узрок проблема који је настао, ко је објавио да постоји неки проблем и када, и још много тога. У општем случају, употреба VCS система подразумева и то да ако нешто забрљате или изгубите фајлове, лако можете да их повратите. Штавише, све ово добијате уз веома мало муке.

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

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

Да би се изборили са овим проблемом, програмери су одавно развили локалне VCS системе који су имали једноставну базу података у којој су се чувале све промене одређених фајлова.

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

Један од популарнијих алата за VCS био је систем под именом RCS, који се и данас испоручује уз многе рачунаре. RCS ради тако што у посебном формату на диску чува скуп закрпи (patch set, односно разлике између фајлова); онда се проласком кроз све закрпе може поново добити изглед фајла у било ком временском тренутку.

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

Следећи велики проблем на који људи наилазе је потреба за сарадњом са програмерима на другим системима. Да би се изборили са овим проблемом, развијени су централизовани системи за контролу верзије (CVCS). Ови системи, као што су CVS, Subversion и Perforce имају један сервер који садржи све верзионисане фајлове, и одређени број клијената који преузимају фајлове са тог централног места. Током много година, ово је био стандардни начин за реализацију контроле верзије.

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

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

Међутим, оваква поставка има и неке озбиљне недостатке. Најочигледнији је јединствена тачка квара коју представља овако централизовани сервер. Ако сервер буде у квару на сат времена, ниједна особа не може да ради на пројекту, нити да чува верзионисане промене онога што тренутно ради. Ако се хард диск на коме се налази централизована база података оштети, губи се апсолутно све — читава историја пројекта осим оних тренутних верзија које људи имају на локалним машинама. Локални VCS системи имају исти овај проблем — кад год се читава историја пројекта налази на једном месту, постоји ризик да се изгуби све.

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

Овде долазе на ред дистрибуирани системи за контролу верзије (DVCS). Код DVCS система (као што су Git, Mercurial, Bazaar или Darcs), клијенти не преузимају само тренутан изглед фајлова, већ потпуно пресликавају цео репозиторијум. Тако, ако неки од сервера престане са радом, а ови системи су се повезали помоћу њега, сваки од клијентових репозиторијума може да се ископира назад на сервер да би се он обновио. Сваки клон је буквално потпуна резервна копија свих података.

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

Штавише, многи од ових система се прилично добро носе са више репозиторијума на даљину са којима могу да раде, тако да можете сарађивати са различитим групама људи на различите начине истовремено у истом пројекту. Ово вам омогућава да подесите неколико типова токова рада који нису могући у централизованом систему, као што су хијерархијски модели.