Git
Chapters ▾ 2nd Edition

1.1 Početak - O kontroli verzije

Ovo poglavlje će se baviti nekim osnovnim stvarima o Gitu. Počećemo uz kratka objašnjenja o tome kako rade alati za kontrolu verzije, a onda ćemo preći na to kako podesiti Git da radi na sistemu koji koristite, i na kraju ćemo sve to namestiti da biste mogli da krenete sa radom. Na kraju poglavlja trebalo bi da razumete zašto Git postoji i zašto treba da ga koristite i bićete spremni da sve to sprovedete u delo.

O kontroli verzije

Šta je "kontrola verzije", i zašto bi vas to zanimalo? Kontrola verzije je sistem koji pamti promene fajla ili skupa fajlova tokom vremena kako biste mogli da se vratite na određene verzije kasnije. Za primere u ovoj knjizi koristićete izvorni kôd softvera kao fajlove nad kojima se primenjuje kontrola verzije, ali u stvarnosti ovakav pristup bi radio sa skoro svakom vrstom fajlova na računaru.

Ako ste grafički ili veb dizajner i želite da sačuvate svaku verziju slike ili makete (što je dobra praksa), vrlo je mudra ideja koristiti sistem za kontrolu verzije (Version Control System, VCS). Dozvoljava vam da vratite fajlove na pređašnje stanje, da vratite čitav projekat na pređašnje stanje, da poredite izmene tokom vremena, da vidite ko je poslednji modifikivao nešto što bi moglo da bude uzrok problema koji je nastao, ko je objavio da postoji neki problem i kada, i još mnogo toga. U opštem slučaju, korišćenje VCS-a znači i to da ako nešto zabrljate ili izgubite fajlove, lako možete da ih povratite. Štaviše, dobijate sve ovo uz veoma malo muke.

Lokalni sistemi za kontrolu verzije

Metoda za kontrolu verzija koju većina ljudi bira jeste kopiranje fajlova u drugi folder (oni mudriji bi mogli da ga recimo obeleže datumom). Ovaj pristup je veoma čest jer je dosta jednostavan, ali je istovremeno jako podložan greškama. Lako je zaboraviti u kom ste folderu i slučajno upisati nešto u pogrešan fajl ili kopirati preko fajlova koje ste nameravali da sačuvate.

Da bi se izborili sa ovim problemom, programeri su odavno razvili lokalne VCS-ove koji su imali jednostavnu bazu podataka koja je čuvala sve promene određenih fajlova.

Lokalna kontrola verzije.
Figure 1. Lokalna kontrola verzije.

Jedan od popularnijih alata za VCS bio je sistem zvan RCS, koji je i danas distribuiran uz mnoge računare. Čak i popularni operativni sistem Mac OS X sadrži komandu rcs kada se instalira Developer Tools. RCS radi tako što čuva skup zakrpi (patch set, odnosno razlike između fajlova) u posebnom formatu na disku; onda se može ponovo dobiti izgled fajla u bilo kom vremenskom trenutku prolaskom kroz sve zakrpe.

Centralizovani sistemi za kontrolu verzije

Sledeći veliki problem na koji ljudi nailaze je potreba za kolaboracijom sa programerima na drugim sistemima. Da bi se izborili sa ovim problemom, razvijeni su centralizovani sistemi za kontrolu verzije (CVCS). Ovi sistemi, kao što su CVS, Subversion i Perforce imaju jedan server koji sadrži sve verzionisane fajlove, i određeni broj klijenata koji preuzimaju fajlove sa tog centralnog mesta. Tokom mnogo godina, ovo je bio standardan način za realizaciju kontrole verzije.

Centralizovana kontrola verzije.
Figure 2. Centralizovana kontrola verzije.

Ovakva postavka nudi mnoge prednosti, pogotovo nad lokalnim VCS-ovima. Na primer, svi do neke granice znaju šta ostali rade na projektu. Administratori imaju detaljnu kontrolu nad time ko može da uradi šta; i mnogo je lakše administrovati CVCS-om nego uhvatiti se u koštac sa lokalnim bazama podataka svakog klijenta.

Međutim, ovakva postavka ima i neke ozbiljne nedostatke. Najočigledniji je jedinstvena tačka kvara koju predstavlja ovako centralizovani server. Ako server bude u kvaru na sat vremena, nijedna osoba ne može da radi na projektu, niti da čuva verzionisane promene onoga što trenutno radi. Ako se hard-disk na kome se nalazi centralizovana baza podataka ošteti, gubi se apsolutno sve — čitava istorija projekta osim onih trenutnih vezija koje ljudi imaju na lokalnim mašinama. Lokalni VCS sistemi imaju isti ovaj problem — kad god se čitava istorija projekta nalazi na jednom mestu, postoji rizik gubitka svega.

Distribuirani sistemi za kontrolu verzije

Ovde dolaze na red distribuirani sistemi za kontrolu verzije (DVCS). Kod DVCS-ova (kao što su Git, Mercurial, Bazaar ili Darcs), klijenti ne preuzimaju samo trenutan izgled fajlova, već potpuno preslikavaju ceo repozitorijum. Tako, ako neki od servera prestane sa radom, a ovi sistemi su se povezali pomoću njega, svaki od klijentovih repozitorijuma može da se iskopira nazad na server da bi se on obnovio. Svaki klon je bukvalno rezerva svih podataka.

Distribuirana kontrola verzija.
Figure 3. Distribuirana kontrola verzija.

Štaviše, mnogi od ovih sistema se prilično dobro nose sa više repozitorijuma na daljinu sa kojima mogu da rade, tako da možete kolaborirati sa različitim grupama ljudi na različite načine istovremeno u istom projektu. Ovo vam omogućava da podesite nekoliko tipova tokova rada koji nisu mogući u centralizovanom sistemu, kao što su hijerarhijski modeli.