Git
Chapters ▾ 2nd Edition

1.3 Začetek - Kaj je Git?

Kaj je Git?

Torej na kratko, kaj je Git? To je pomemben razdelek, ki ga je treba razumeti, saj bo učinkovitejša uporaba Gita verjetno veliko enostavnejša, če boste razumeli, kaj Git je in kateri so njegovi osnovni načini delovanja. Med učenjem Gita poskusite zbistriti svoje misli glede stvari, ki jih morda veste o drugih sistemih za nadzor različic (VCS), kot so CVS, Subversion, ali Perforce, saj vam bo to pomagalo izogniti se subtilni nejasnosti pri uporabi orodja. Čeprav je uporabniški vmesnik Gita precej podoben tem drugim VCS-jem, Git podatke shranjuje in razmišlja o njih na precej drugačen način, razumevanje teh razlik pa vam bo pomagalo izogniti se zmedi pri uporabi.

Posnetki, ne razlike

Glavna razlika med Git in katerimkoli drugim VCS (Subversion skupaj s prijatelji) je način, kako Git razmišlja o svojih podatkih. Konceptualno večina ostalih sistemov shranjuje informacije kot seznam sprememb na osnovi datotek. Ti ostali sistemi (CVS, Subversion, Perforce itd.) razmišljajo o informacijah, ki jih hranijo, kot skupek datotek in sprememb, narejenih na vsaki datoteki med časom (to je običajno opisano kot nadzor različic na podlagi delte).

Shranjevanje podatkov kot spremembe osnovne različice vsake datoteke
Slika 4. Shranjevanje podatkov kot spremembe osnovne različice vsake datoteke

Git ne razmišlja o shranjevanju svojih podatkov na ta način. Namesto tega Git razmišlja o svojih podatkih bolj kot skupek posnetkov miniaturnega datotečnega sistema. Z Gitom vsakič, ko izvedete potrditev ali shranite stanje vašega projekta, Git v osnovi naredi sliko, kako so vse vaše datoteke videti v tem trenutku in shrani referenco na tisti posnetek. Za učinkovitost, če se datoteke niso spremenile, jih Git ne shrani ponovno, samo povezavo na prejšnjo identično datoteko, ki jo že ima shranjeno. Git razmišlja o svojih podatkih bolj kot tok posnetkov.

Shranjevanje podatkov kot posnetke projekta med časom
Slika 5. Shranjevanje podatkov kot posnetke projekta med časom

To je pomembna razlika med Gitom in skoraj vsemi ostalimi VCS-ji. Git ponovno preuči skoraj vsak vidik nadzora različic, ki jih večina ostalih sistemov kopira iz prejšnje generacije. To naredi Git bolj kot majhen datotečni sistem z nekaj zelo zmogljivimi orodji zgrajenimi na njem, v primerjavi s preprosto samim VCS. Prednosti, ki jih pridobite z razmišljanjem o svojih podatkih na ta način, bomo raziskali pri pokrivanju vej Git v poglavju Veje Git.

Skoraj vsaka operacija je lokalna

Večina operacij v Gitu potrebuje za delovanje samo lokalne datoteke in vire — v splošnem ni potrebnih nobenih informacij iz drugega računalnika na vašem omrežju. Če ste vajeni na CVCS, kjer ima večina operacij ceno latence omrežja, boste mislili, da so bogovi hitrosti blagoslovili ta vidik Gita z nadnaravnimi močni. Ker imate vso zgodovino projekta ravno tam na svojem lokalnem disku, se zdi večina operacij takojšnjih.

Na primer, za brskanje po zgodovini projekta Git ni potrebno oditi na strežnik, da se dobi zgodovino in se vam jo prikaže — Git enostavno prebere le-to neposredno iz vaše lokalne podatkovne baze. To pomeni, da vidite zgodovino projekta skoraj takoj. Če želite videti spremembe, ki so uvedene med trenutno verzijo datoteke in datoteko pred mesecem dni, lahko Git poišče datoteko za toliko časa nazaj in naredi izračun lokalnih razlik, namesto da sprašuje oddaljeni strežnik, da to izvede ali prenese starejšo verzijo datoteke iz oddaljenega strežnika, saj naredi to lokalno.

To tudi pomeni, da je zelo malo česar ne morete narediti, ko ste brez povezave ali brez VPN. Če greste na letalo ali vlak in želite narediti nekaj dela, lahko veselo naredite potrditve (na vaši lokalni kopiji), dokler ne pridete na omrežno povezavo, ko jih naložite. Če greste domov in ne morete pravilno nastaviti svojega odjemalca VPN, lahko še vedno delate naprej. V veliko drugih sistemih je to nemogoče ali pa boleče. V Perforcu na primer ne morete narediti veliko, če niste povezani na strežnik; v Subversionu ter CVS-u lahko urejate datoteke, vendar ne morete poslati potrditev v svojo podatkovno bazo (ker je vaša podatkovna baza brez povezave). To mogoče ni velik problem, vendar boste morda presenečeni, kakšno veliko razliko lahko to naredi.

Git ima integriteto

Vse v Gitu je kontrolirano preko vsot, predno je shranjeno in nato je sklicano glede na to kontrolno vsoto. To pomeni, da je nemogoče spremeniti vsebino katerekoli datoteke ali direktorija, brez da bi Git to vedel. Ta funkcionalnost je vgrajena v Git na najnižjem nivoju in je sestavni del njegove filozofije. Ne morete izgubiti podatkov med prevozom ali dobiti pokvarjene datoteke, brez da bi Git to zaznal.

Mehanizem, ki ga Git uporablja za to kontroliranje vsot, se imenuje zgoščena vrednost SHA-1. To je 40-znakovni niz sestavljen iz znakov šestnajstiškega zapisa (0-9 in a-f) in preračunan na osnovi vsebine datoteke ali strukture direktorijev v Gitu. Zgoščena vrednost SHA-1 je videti nekako takole:

24b9da6552252987aa493b52f8696cd6d3b00373

Te zgoščene vrednosti boste videli v Gitu vsepovsod, ker jih veliko uporablja. V bistvu Git shranjuje vse v svojo podatkovno bazo ne preko imena datoteke vendar preko zgoščene vrednosti svojih vsebin.

Git v splošnem samo doda podatke

Ko izvajate akcije v Gitu, skoraj vse od njih samo dodajo podatke v podatkovno bazo Git. Težko je narediti, da bo sistem naredil karkoli, česar se ne da povrniti, ali izbrisati podatkov na kakršen koli način. Kot v kateremkoli VCS-ju lahko izgubite ali pokvarite spremembe, ki jih še niste potrdili; vendar ko pošljete posnetek v Git, je zelo težko kaj izgubiti, posebej, če pogosto pošiljate svojo podatkovno bazo v drug repozitorij.

To naredi uporabo Gita užitek, ker vemo, da lahko eksperimentiramo brez nevarnosti, da bi stvari resno uničili. Za bolj poglobljen pogled na to, kako Git shranjuje svoje podatke in kako lahko povrnete podatke, ki se zdijo izgubljeni, glejte razdelek Razveljavljanje stvari.

Tri stanja

Sedaj bodite pozorni — to je glavna stvar, ki si jo morate zapomniti o Gitu, če želite, da preostanek procesa učenja poteka gladko. Git ima tri glavna stanja, v katerih se lahko nahajajo vaše datoteke: spremenjene (angl. modified), dane v pripravo (angl. staged) in potrjene (angl. commited).

  • Spremenjeno pomeni, da ste spremenili datoteko, vendar je še niste potrdili v svojo podatkovno bazo.

  • Dano v pripravo pomeni, da ste označili spremenjeno datoteko v njeni trenutni verziji, da gre v naslednji posnetek potrditve.

  • Potrjeno pomeni, da so podatki varno shranjeni v vaši lokalni podatkovni bazi.

To nas vodi k trem glavnim razdelkom projekta Git: delovna drevesna struktura, področje priprave in direktorij Git.

Delovna drevesna struktura, področje priprave in direktorij Git
Slika 6. Delovna drevesna struktura, področje priprave in direktorij Git

Delovni direktorij je en sam izvlek ene verzije projekta. Te datoteke so povlečene iz stisnjene podatkovne baze v direktoriju Git in dane na disk za vas, da jih uporabite ali spremenite.

Področje priprave je datoteka, v splošnem vsebovana v vašem direktoriju Git, ki shranjuje informacije o tem, kaj bo šlo v vašo naslednjo potrditev. Njegovo tehnično ime v jeziku Git je »indeks« (angl. index), vendar se pogosto imenuje tudi področje priprave podatkov (angl. staging area).

Direktorij Git je, kjer Git shranjuje metapodatke in objektno podatkovno bazo za vaš projekt. To je najpomembnejši del Gita in je, kar se kopira, ko klonirate repozitorij iz drugega računalnika.

Osnovni potek dela Git gre nekako takole:

  1. Spremenite datoteke v svojem delovnem direktoriju.

  2. Selektivno daste v pripravo samo spremembe, ki jih želite v naslednji potrditvi, kar doda samo tiste spremembe v področje priprave.

  3. Jih potrdite, kar vzame datoteke, kakršne so v področju priprave in shrani ta posnetek dokončno v vaš direktorij Git.

Če je določena verzija datoteke v direktoriju Git, se smatra za potrjeno. Če je bila spremenjena in dodana v področje priprave podatkov, je dana v pripravo. In če je bila spremenjena, odkar je bila prenesena, vendar ni bila dana v področje priprave, je spremenjena. V poglavju Osnove Git se boste naučili več o teh stanjih in kako jih lahko uporabite ali pa preskočite področje priprave v celoti.

scroll-to-top