Version Control System (ili Revision Control System ili Source Control) je zapravo repozitorij datoteka i najčešće se spominje u kontekstu programiranja i vođenja projekata, odnosno revizija programa, ali ne nužno. Version Control sustavi (dalje: VSC) se mogu koristiti za razne vrste kolaboracije, odnosno suradnje. Isti možete koristiti kako biste pratili sve izmjene na datotekama – tko ih je napravio, kada ih je napravio, što je promijenio, zašto je to promijenio i slično.
Vjerojatno najbolje od svega je što u svakom trenutku datoteku možete vratiti na jedno od stanja u prošlosti i imate cijelu povijest izmjena. Možda nikada niste radili na projektima gdje je potrebna određena vrsta suradnje ili niste radili na projektu gdje je bitno imati povijest cijelog projekta, no kada se nađete u takvoj situaciji, počnete cijeniti dotične sustave. Neki su stariji, neki noviji, neki imaju više mogućnosti, neki manje, no bez obzira na koji alat se oslanjali, bitno je da ga ispravno koristite i da znate kako ga koristiti. Mi se u ovom tekstu nećemo previše baviti time kako koristiti određeni alat, nego vidjeti koji su plusevi, a koji minusi kod korištenja ovakvih alata, što sve postoji na tržištu i slično. Više, čitajte u nastavku teksta.
VCS
Krenimo od definicije – VCS je mjesto (repozitorij) na računalu/serveru ili nekom sličnom uređaju gdje spremate svoje datoteke. To mogu biti obične tekstualne datoteke, baza podataka, datoteke od kojih se sastoji računalni program ili nešto četvrto. Tom repozitoriju mogu imati pristup svi, no u praksi istome ima pristup samo određen broj ljudi kojima je dan pristup. Ono što je specifično za VSC je da korisnik koji ima pristup repozitoriju može „uzeti“ dokument/datoteku iz repozitorija i na njoj napraviti izmjenu.
Nakon što napravi izmjenu, „vraća“ dokument u repozitorij i ostali korisnici mogu vidjeti tu istu datoteku. Kao što vidite, riječ je o sustav, odnosno sustavima putem kojih ljudi surađuju, odnosno zajedno rade na projektu, dokumentima … Postoji više vrsta Version control sustava i oni mogu biti centralizirani i decentralizirani, no u samoj suštini su slični. Sve izmjene u repozitoriju se prate, tako da svaki dokument ima svoj broj revizije (možete to gledati i kao broj verzije), te cijelu povijest izmjena.
Kada postavite dokument u repozitorij, on ima revizije 1. Kada korisnik uzme dokument, napravi izmjenu na njemu, vrati ga nazad u repozitorij njegov broj revizije je 2 i tako dalje. Umjesto brojeva, nekad se koriste i neke druge oznake, no to trenutačno nije previše bitno za ovaj tekst. Kada bi netko poželio vidjeti spomenuti dokument, vidio bi verziju 2, no mogao bi vidjeti i povijest cijelog dokumenta koja je u ovom slučaju vrlo mala i nezanimljiva. No, teoretski, moglo bi se vidjeti tko je dokument postavio u repozitorij, kada i zašto je taj dokument tamo (neki repozitoriji i alati zahtijevaju opise dokumenta i komentare prilikom svake izmjene), te biste mogli vidjeti tko je napravio izmjenu, što je sve izmijenio, tko je zamijenio dokument i zašto ga je zamijenio. To je suština ovakvih alata i unazad 10-ak godina su doživjeli procvat.
Koriste se sve više, posebice u IT kompanijama koje moraju pratiti dokumente ili projekte koje razvijaju. VCS su najčešće zasebni alati koje instalirate na računalo ili server gdje će se nalaziti repozitorij dokumenata, ali sve više drugih aplikacija ugrađuje ove sustave kako bi korisnik mogao pratiti povijest izmjena na svojim dokumentima. Tako ćete to naći u mnogim uredskim alatima (čak je ta opcija neko vrijeme bila aktivna i u MS Officeu), Google Docsu, Wikipediji, pa čak i u Windowsima možete uključiti opciju File History gdje će se spremati verzije vaših dokumenata na kojima radite i koje kreirate.
Ostali razlozi zašto koristiti VCS
Prije nego se pozabavimo prednostima, osim kolaboracije, koje ovakvih sustavi nude moramo napraviti podjelu VCS-a na distribuirane i centralizirane. Centralizirani sustav za praćenje kontrole se bazira na ideji da postoji jedna centralna kopija, najčešće na serveru, i svi rade direktno izmjene na njoj. To je ponekad opasno jer ako dvije ili više osoba radi na jednoj datoteci paralelno, a ne znaju da rade u isto vrijeme na njoj, moglo bi se dogoditi da jedan drugome „pregaze“ izmjene.
Te izmjene se sve naravno vide u povijesti mijenjanja dokumenta, ali se onda moraju ručno spajati u jednu i slično. Mnogo bolja varijanta je distribuiranog sustava (DVSC) kao što su Git, Mercurial i Bazaar. To su sustavi koji imaju centrali repozitorij, no svaki korisnik klonira repozitorij sebi na računalo i sve izmjene radi na radnoj (lokalnoj) kopiji koju ima, a tek kasnije izmjene šalje na centralnu datoteku. Naravno, krivulja učenja korištenja takvih alata je nešto duža, no kada jednom to počnete koristiti, više nećete htjeti raditi bez takvog sustava.
No, vratimo se prednosti ovakvih sustava za praćenje verzija. Prvo je definitivno kolaboracija koju smo već nekoliko puta spomenuli. Bez ovakvog sustava u kompaniji, prilično je teško pratiti dokument. Osim eventualno ako nemate kakav ‘Document management sustav’. U protivnome, kolaboracija ide putem emailova, prenose se dokumenti USB stickovima, dijele se preko mreže i slično. No, kada nekoliko ljudi počne raditi na istoj datoteci, više se ne zna tko ima zadnju verziju, tko ima originalnu verziju i koja je konačna verzija. Na kraju krajeva – tko će spojiti sve izmjene u jednu smislenu cjelinu? Ona osoba koja je napravila originalni dokument ili netko drugi? VSC rješava sve te probleme, te ne ovisite o nikome. Napravite izmjene i pošaljete ih u repozitorij na originalni dokument.
Pregled povijesti dokumenta smo također spomenuli. Vrlo je korisno vidjeti tko je izmjene radio, kakve je izmjene radio, zašto ih je radio i slično. To se posebice odnosi na programiranje. Mnoge aplikacije razvija veći broj programera i svi rade na istim stvarima i bilo bi teško pratiti što se događa, koji bugovi su ispravljeni, tko ima verziju sa ispravljenim bugovima, tko ima nove mogućnosti i funkcije u aplikaciji … Pratiti povijest dokumenta nije tako kompleksno, ali pratiti povijest projekta je mnogo kompleksnije i zato je važno imati ovakav alat.
Čak i korištenje nekog lošije alata – kao što je Microsoftov SourceSafe – je bolje od nikakvog alata. Također, VSC alati vam dozvoljavaju paralelan razvoj aplikacija, možete ih granati i raditi odvojene verzije aplikacije i još mnogo toga. Svaki pravi programer će vam reći da nema ozbiljnog razvoja aplikacije bez ovakvog alata. Izuzetno je koristan čak i za situacije kada vi sami nešto razvijate jer u svakom trenutku možete vratiti na staru verziju koja vam možda ima neku funkciju koju ste tokom razvoja aplikacije maknuli, a sada vam opet treba. To je također jedna od prednosti. Vraćanje starih funkcija, ali i backup dokumenata i projekata. Mogli bi reći da je sigurnosna kopija dokumenata zapravo sporedna stvar u ovakvim sustavima, ali je također vrlo vrijedna. Uvijek treba imati sigurnosnu kopiju onoga što pišemo ili razvijamo, a posebno kada razvijamo aplikacije.
Na kraju krajeva, kada zavrite projekt, pomoću ovih alata možete vidjeti cijeli projekt, cijeli njegov životni ciklus, u kojem smjeru se isti razvijao i razumjeti sve komponente od kojih se projekt sastoji. Kada biste nas pitali za negativne strane ovakvih sustava i alata, ne znamo što bismo vam konkretno rekli. Da, repozitorij negdje morate smjestiti – najbolje na neko udaljeno računalo, odnosno server, te se netko s time mora pozabaviti (osigurati pristup samo određenim ljudima, napraviti backup repozitorija i slično), no tu su sve sitnice. Da, tu je i određeno vrijeme koje morate utrošiti da naučite koristiti alat ili sustav, no on se mjeri u danima, eventualno tjednima. Najteže će vam vjerojatno biti naučiti Git, no ako pročitate neki tutorijal od 50-100 stranica, naučiti ćete sve što vam treba – u teoriji. Tada to treba probati u praksi i kada u glavi shvatite kako sustav funkcionira, koristiti ćete ga bez problema. SourceSafe je vjerojatno najlakše koristiti jer imate centralizirani repozitorij na kojem doslovno radite dvije operacije – check out (uzimanje projekta na obradu) i check in (vraćanje obrađenog projekta u centralni repozitorij).
Alati/sustavi na tržištu
Na tržištu postoji 10-15 različitih sustava za praćenje izmjena na datotekama, no samo 3-4 imena se ističu. Riječ je o alatima/sustavima koji su najrašireniji i koje koristi 90 posto ljudi koji koriste iste. Spomenuli smo Microsoftov SourceSafe. To je sustav koji je izašao 2005.-te godine i nikada više nije ažuriran. Tada, prije 10 godina, je bio odličan, no danas ga je vrijeme pregazilo i zasigurno ga ne koristi veći broj ljudi. Dapače, i sam Microsoft je prešao na Git.
Tako da se ti alati i sustavi tokom godina mijenjaju, mada bi se usudili reći da će Git trajati neko duže razdoblje. Možda će doći neki novi sustavi sa naprednijim mogućnostima, ali mnogi od njih će se i dalje oslanjati na Git. Poanta ovih par rečenica je – postoje mnogi sustavi, no koristite oni koji su trenutačno najbolji i koji najviše odgovaraju vašim potrebama. Da li će to biti Git, SVN, Mercurial, CVS ili Bazaar – vi odlučite. Naš izbor je definitivno Git.
Git – Git je najbrže rastući sustav/alat ovakve vrste i nema kompanije koja ga ne koristi. Barem kada je riječ o velikim IT kompanijama koje razvijaju softver ili se bave nečime vezanim uz isti. Git je inicijalno razvio Linus Torvalds kao alat koji bi mu trebao pomoći da brže i kvalitetnije razvija jezgru Linuxa, a programerska zajednica ga je kao takvog i prihvatila, iako je Linus htio da se Git koristi malo drugačije. Odnosno da Git bude jezgra budućih alata koji će koristiti Git u pozadini. Bez obzira na to, Git je vrlo fleksibilan i distribuiran VCS i s njim možete jako brzo razvijati softver, te pratiti što se s njime događa. Posebice je dobar jer u tren oka možete „razgranati“ projekt, a da originalni kôd ne dirate.
Danas se Git koristi za razvoj Linuxa, jezgre Linuxa, Microsoft ga koristi za razvoj C# jezika, CLR-a, kompajlera,.NET platforme i tako dalje. Kako koristiti Git, u ovom tekstu nećemo opisivati, no toliko je tekstova napisano na temu Gita i toliko tutorijala postoji na Internetu da ćete se bez problema snaći. Ako tražite dobar VCS za programiranje, neka vam Git bude prvi izbor.
SVN (Subversion) – Iako mi konstantno hvalimo i promoviramo Git kao najbolji VCS sustav, ne može se poreći činjenica da veliki broj korisnika i dalje koristi Apache Subversion (SVN). On je nastao kao odgovor na CVS (Concurrent Version System), odnosno kao poboljšana verzija istoga. SVN je htio ispraviti greške iz CVS-a te korisnicima dodati hrpu novih mogućnosti. Uspjeli su u svom naumu i napravili odličan sustav. Još bolje je što je SVN open source i možete ga koristiti bez ikakve naknade, a čak možete sudjelovati i u njegovom razvoju.
Ono što bismo istaknuli kao prednost nad ostalim sustavima ovog tipa je mnoštvo klijenata koji su nastali radi SVN-a i s njima možete vrlo upravljati datotekama, projektima (odličan za mnoge druge stvari mimo programiranja) … Ako vas zanima koji su to klijenti, svakako pogledajte Tortoise SVN, Version, Xcode (Appleov IDE koji dolazi sa SVN-om) … Ono što mu se zamjera je manja brzina od nekih drugih sustava, radi se o centraliziranom sustavu koji ima određenih mana ako ga uspoređujemo sa decentraliziranim sustavima i pošto je sav kod u jednom centralnom repozitoriju na serveru, klijenti ne mogu do njega kada je server ugašen ili ima poteškoća u radu. Dok Git korisnici imaju repozitorij kloniran lokalno i mogu raditi bez ikakvih problema.
Mercurial – Alat koji je počeo kao i Git, odnosno na sličnim principima i također se radi o distribuiranom sustavu. Napravljen je da bi se natjecao sa Gitom za razvoj jezgre, iako je bilo gotovo nemoguće se natjecati s time jer je, kao što smo rekli, iza Gita stajao Linus Torvalds. Bez obzira na to, programeri koji su razvijali Mercurial bili su uvjereni da će napraviti nešto bolje i efikasnije. Bitna razlika je da je Mercurial razvijen u Pythonu, dok su Git i slični alati razvijeni u C-u.
Čak su neki korisnici komentirali da Mercurial sadrži ono najbolje od Gita i SVN-a, te da bolje radi od Gita. Za ovo zadnje nismo sigurni, ali se možemo složiti da je Mercurial mješavina spomenutih alata. Jedan od velikih problema je i što se neke stvari kod Mercuirala teško spajaju u jednu verziju, pa tu zna nastati određenih problema. No, svakako ga je lakše naučiti od Gita, posebice ako ste koristili SVN prije toga, te je bolje dokumentiran i objašnjen. Git ima relativno dugačku krivulju učenja, dok Mercurial i nema.
Bazaar – I za kraj smo ostavili Bazaar, vrlo specifičan sustav za verzioniranje. Također se radi o distribuiranom sustavu kao što su Mercurial ili Git, ali je malo više user friendly i često se naziva „Version control for human beings“. Na taj način žele reći da su Git i ostali sustavi komplicirani. U prvi mah sigurno jesu, no kada ih naučite, nemate nikakvih problema. No, vratimo se na Bazaar. Riječ je o fleksibilnom sustavu koji možete jako podesiti svojim potrebama.
Od toga da radite sami i želite si napraviti sustav za praćenje verzija, do kreiranja distribuiranog i centraliziranog workflowa, te sa mnoštvom varijacija na temu. Mnogo ga je lakše prilagoditi svojim potrebama jer imate pristup postavkama i nema tog scenarija koji ne možete pratiti sa ovim sustavom. Logično pitanje koje se postavlja, zašto Bazaar nije onda najpopularniji VCS? Teško je reći, odnosno nemoguće je dati točan odgovor. Jednostavno ga je manji broj korisnika prihvatio kao takvog, a i velike kompanije su počele koristiti Git, što je vjerojatno ponukalo mnoge pojedince da ga i sami isprobaju.
Postoji još nekoliko sustava na koje ćete naići ukoliko budete istraživali ovo područje, no nisu vrijedni spomena. Prvenstveno jer imaju slabu podršku, male zajednice korisnika, ne postoje servisi koji podržavaju takve sustave i slično.
Što su GitHub, BitBucket i slični servisi?
Kao što ste vidjeli, postoje alati koji možete sami koristiti lokalno i koje možete iskoristiti kod kuće, u kompanijama i slično. No, postoje i Internet servisi koji se često spominju u kontekstu Gita i spremanja kôda ili dokumenata. GitHub, BitBucket, Redmine, GitLab, Codeplex …. su web servisi koji se baziraju na Gitu, SVNu, Bazaaru ili nečem četvrtom i na kojima možete kreirati svoj repozitorij. Znači – glavni repozitorij možete držati lokalno na računalu, možete lokalno ili udaljeno na određenom serveru/mreži, te u oblacima.
Ovi servisi su servisi u oblacima i možete ih najnormalnije koristiti, s time da putem web preglednika možete pristupiti svom kôdu koji se nalazi u oblacima, možete konfigurirati pristup tko ima pravo na njega i koje ovlasti, možete kreirati timove s kojima želite programirati, možete komentirati tuđi kôd, slati poruke i još mnogo toga. Imati repozitorij na jednom ovakvom servisu je odlično jer se ne morate brinuti o sigurnosnoj kopiji glavnog repozitorija, možete mu pristupiti od kuda god želite, možete ga linkati budućim poslodavcima kako bi vidjeli vaš „stil“ programiranja i još mnogo toga. A da ne govorimo da možete postići određenu reputaciju u programerskim krugovima.
Naravno, svaki od spomenutih servisa ima svojih prednosti i mana, a na vama je da vidite koji vam najviše odgovara. Recimo, BItBucket je odličan jer vam nudi da kreirate neograničen broj privatnih repozitorija (kojima nitko ne može pristupiti osim vas), dok je GitHub mnogo popularniji i na njemu se nalazi većina svjetskih projekata na kojima radi ogroman broj programera – spomenuli smo već linux jezgru, mnoge distribucije Linuxa, MS-ov programski jezik C#, CLR … Ako znate programirati, svakako se uključite u takve projekte. Pogotovo ako programirate u programskim jezicima C/C++/C#/Java … Takvih projekata je definitivno najviše. Nadalje, možete i sami pokrenuti open source projekt i ako drugima bude zanimljiv, možete s njime napraviti što god želite. Na ovaj način su se recimo razvili mnogi programerski libraryji koji su danas implementirani u Java SDK i slično.
Zaključak
Zaključak ovog teksta je da trebate koristiti Version Control System (VCS) ako imate potrebe pratiti određeni projekt ili razvoj softvera. Zaboravite staromodne metode kopiranja projekata od osobe do osobe i slanje istoga emailom. Korištenjem ovakvog sustava imate potpunu slobodu razvoja, ne morate se brinuti da će se nešto dogoditi s projektom ili da će netko „uništiti“ originalni dokument i tako dalje. U ovom tekstu smo vam pokušali prikazati one pozitivne strane ovakvih alata i sustava i nadamo se da ćete ih koristiti ili barem isprobati.
Zanimljivo je da mnogi studenti tehničkih i srodnih fakulteta u Hrvatskoj ovakve alate niti ne pogledaju na fakultetu, a kada dođu na budući posao – pogotovo ako se radi o softverskom razvoju – treba im 2 mjeseca da se na njih naviknu. Šteta jer mogu u slobodno vrijeme isprobati ove alate i naučiti ih koristiti. Pogledajte i mnoge oglase u IT sektoru. Ako se radi, ponavljamo, o razvoju softvera svaki oglas će imati stavku da je poželjno znanje jednog od ovakvih alata, a posebice Gita. Zašto biste „pali“ na intervjuu kada možete naučiti koristiti ovaj alat i još k tome imati ogromnu korist od istoga. Zato, počnite još danas koristiti sustave za verzioniranje, a jednom kada se naučite na njih nećete više moći i htjeti raditi bez njih. Pa čak i ako sami razvijate softver za svoje potrebe.