Git
Chapters ▾ 2nd Edition

1.1 Pričetek - O nadzoru različic

To poglavje bo o pričetku z Git-om. Pričeli bomo z razlago ozadja o orodjih za kontrolo verzij, nato se premaknili na to, kako pognati Git na vašem sistemu in končno kako ga nastaviti, da začnete z delom. Na koncu tega poglavja bi morali razumeti, zakaj je Git na voljo, zakaj bi ga morali uporabljati in pripravljeni bi morali biti za delo z njim.

O nadzoru različic

Kaj je "nadzor različic" in zakaj bi morali za to skrbeti? Nadzor različic je sistem, ki zapisuje spremembe v datoteko ali skupek datotek tekom časa, da lahko kasneje prikličete določeno različico. Za primere v tej knjigi boste uporabljali izvorno kodo programske opreme kot datoteke, ki bodo nadzirane v različicah, vendar v realnosti lahko to naredite s skoraj katerimkoli tipom datotek na računalniku.

Če ste grafični ali spletni oblikovalec in želite slediti vsaki verziji slike ali postavitve (kar nadvse verjetno želite), je sistem nadzora različic (VCS) zelo modra odločitev za uporabo. Omogoča vam povrniti datoteke nazaj v prejšnje stanje, povrniti celoten projekt nazaj v prejšnje stanje, primerjati spremembe tekom časa, pogledati, ko je zadnji kaj spremenil, kar bi lahko povzročalo težavo, kdo je predstavil težavo in kdaj ter še več. Uporaba VCS tudi v splošnem pomeni, da če kaj zamočite ali izgubite datoteke, lahko enostavno stvari povrnete. Za dodatek dobite vse to za zelo majhno ceno.

Lokalni sistemi nadzora različic

Metoda izbire nadzora različic veliko ljudi je kopiranje datotek v drug direktorij (mogoče časovno označen direktorij, če so pametni). Ta pristop je zelo pogost, ker je tako enostaven, vendar je tudi zelo odprt za napake. Enostavno je pozabiti v katerem direktoriju se nahajate in po nesreči pišete v napačno datoteko ali prepišete datoteke, ki jih niste želeli.

Za spoprijemanje s to težavo so programerji že davno nazaj razvili lokalne VCS-je, ki so imeli enostavno podatkovno bazo, ki je shranjevala vse spremembe na datotekah pod nadzorom različic.

Local version control diagram
Figure 1. Local version control.

Eden priljubljenejših VCS orodij je bil sistem imenovan RCS, ki je še danes distribuiran na mnogih računalnikih. Celo popularni Mac OS X operacijski sistem vključuje ukaz rcs, ko namestite razvijalska orodja. RCS deluje tako, da ohranjanja skupke popravkov (t.j. razlike med datotekami) v posebni obliki na disku; nato lahko ponovno ustvari, kako je katerakoli datoteka izgledala v katerikoli točki časa z dodajanjem vseh popravkov.

Centralizirani sistemi nadzora različic

Naslednja glavna težava, na katero ljudje naletijo je, da potrebujejo sodelovati z razvijalci na drugih sistemih. Za spoprijemanje s tem problemom so bili razviti centralizirani sistemi nadzora različic (CVC). Ti sistemi, ko so CVS, Subversion in Perforce imajo en strežnik, ki vsebuje vse različice datotek in število klientov, ki prenesejo datoteke iz tega centralnega mesta. Za mnogo let je bil standard za nadzor različic.

Centralized version control diagram
Figure 2. Centralized version control.

Ta namestitev ponuja mnogo prednosti, posebej preko lokalnih VCS-jev. Na primer, vsakdo ve do določene mere kaj kdorkoli drug na določenem projektu dela. Administratorji imajo drobno-zrnat nadzor nad te, kdo lahko kaj naredi in to je precej enostavnejše za administrirati CVCS, kot pa se spoprijemati z lokalnimi podatkovnimi bazami na vsakem klientu.

Vendar ta namestitev ima tudi nekatere resne slabosti. Najbolj očitna je odpoved ene same točke, ki jo centralizirani strežnik predstavlja. Če ta strežnik odpove za eno uro, potem med to uro nihče ne more sodelovati ali shraniti sprememb različic na karkoli, na čemer delajo. Če se trdi disk, na katerem je centralna podatkov baza, poškoduje in ustrezne varnostne kopije niso bile ohranjene, boste izgubili absolutno vse - celotno zgodovino projekta razen kateregakoli samega posnetka imajo uporabniki na svojih lokalnih napravah. Lokalni sistemi VCS trpijo za tem problemom - kadarkoli imate celotno zgodovino projekta na enem mestu, tvegate, da boste izgubili vse.

Distribuirani sistemi nadzora različic

To je mesto, kjer distribuirani sistemi nadzora različic (DVCS) pristopijo. V DVCS (kot je Git, Mercurial, Bazaar ali Darcs) klienti ne samo prenesejo zadnjega posnetka datotek: v celoti kopirajo repozitorij. V primeru, da katerikoli strežnik umre in na teh sistemih se je sodelocalo, se lahko kopira repozitorij katerega koli klienta na strežnik in se ga povrne. Vsak klon je resnično celotna varnostna kopija vseh podatkov.

Distributed version control diagram
Figure 3. Distributed version control.

Dalje, mnogo teh sistemov se precej dobto spoprijema z mnogimi oddaljenimi repozitoriji, na katerih se lahko dela, tako da lahko sodelujete z različnimi skupinami ljudi na različne načine simultano znotraj istega projekta. To vam omogoča nastaviti nekaj tipov poteka dela, ki niso možni na centraliziranih sistemih, kot so hierarhični modeli.