Git
Chapters ▾ 2nd Edition

1.3 Pričetek - Osnove Git

Osnove Git

Torej, kaj je Git v svoji lupini? To je pomembna sekcija za absorbiranje, ker če razumete, kaj je Git in osnove kako deluje, potem bo za vas uporaba Git-a efektivno verjetno precej veliko enostavnejša. Kot se boste učili uporabljati Git, poskusite počistiti svoj um pred stvarmi, ki jih morda veste o drugih VCS-jih, kot sta Subversion in Perforce; to vam bo pomagalo se izogniti subtilni zmešnjavi, ko uporabljate orodje. Git shranjuje in razmišlja o informacijah precej različno kot te ostali sistemi, vendar uporabniški vmesnik je precej podoben in razumevanje teh razlik vam bo pomagalo, da ne postanete še bolj zmedeni, medtem ko ga uporabljate.

Posnetki, ne razlike

Glavna razlika med Git in katerimkoli ostalim VCS-jem (Subversion in prijatelji vključeni) je način kako Git razmišlja o svojih podatkih. Konceptualno, večina ostalih sistemov shranjujejo informacije kot seznam sprememb na osnovi datotek. Ti sistemi (CVS, Subversion, Perforce, Bazaar itd) razmišljajo o informacijah, ki jih hranijo kot skupek datotek in sprememb narejenih na vsaki datoteki tekom časa.

Storing data as changes to a base version of each file.
Figure 4. Storing data as changes to a base version of each file.

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. Vsakič ko pošljete ali shranite stanje vašega projekta v Git v osnovi naredi sliko, kako vse vaše datoteke izgledajo 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.

Git stores data as snapshots of the project over time.
Figure 5. Storing data as snapshots of the project over time.

To je pomembna razlika med Git in skoraj vsemi ostalimi VCS-ji. Git ponovno preuči skoraj vsak aspekt nadzora različic, ki jih večina ostalih sistemov kopira iz prejšnjega generiranja. To naredi Git bolj kot mini datotečni sistem z nekaj zelo močnimi orodji zgrajenimi na njem, namesto enostavnosti pri VCS. Raziskali bomo prednosti, ki jih pridobite z razmišljanjem o vaših podatkih na ta način pri pokrivanju veje v Veje Git.

Skoraj vsaka operacija je lokalna

Večina operacij v Git-u 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 tisto ceno latence omrežja, boste mislili, da so bogovi hitrosti blagoslovili ta aspekt Git-a z nezemeljskimi močni. Ker imate vso zgodovino projekta ravno tam na vašem lokalnem disku, se zdi večina operacij takojšnjih.

Na primer, za brskanje po zgodovini projekta, Git ne potrebuje iti ven na strežnik, da dobi zgodovino in jo prikaže za vas - enostavno jo prebere direktno iz vaše lokalne podatkovne baze. To pomeni, da vidite zgodovino projekta skoraj takoj. Če želite videti spremembe predstavljene med trenutno verzijo datoteke in datoteko pred mesecem, lahko Git poišče datoteko za mesec naza in naredi kalkulacijo lokalnih razlik, namesto da bi spraševal oddaljeni strežnik, da to naredi ali da potegne starejšo verzijo datoteke iz oddaljenega strežnika, da to naredi lokalno.

To tudi pomeni, da je zelo malo česar ne morete narediti, ko ste brez povezave ali brez VPN povezave. Če greste na letalo ali vlak in želite narediti nekaj dela, lahko veselo pošiljate dokler ne pridete na omrežno povezavo, da naložite. Če greste domov in ne morete pravilno nastaviti vašega VPN klienta, lahko še vedno delate. V veliko drugih sistemih je to ali nemogoče ali boleče. V Perforce-u na primer ne morete narediti veliko, ko niste povezani na strežnik; in v Subversion ter CVS lahko urejate datoteke, vendar ne morete pošiljati sprememb v vašo podatkovno bazo (ker je vaša podatkovna baza brez povezave). To mogoče ni velik problem, vendar lahko boste presenečeni, kakšno veliko razliko lahko naredi.

Git ima integriteto

Vse v Git-u je kontrolirano preko vsot preden je shranjeno in je nato sklicano glede na to kontrolno vsoto. To pomeni, da je nemogoče spremeniti vsebino katerekoli datoteke ali direktorija brez, da bi Git o tem vedel. Ta funkcionalnost je vgrajena v Git na najmanjšem nivoju in je integral njene filozofije. Ne morete izgubiti podatkov v tranzitu ali dobiti pokvarjene datoteke brez, da bi bil Git sposoben to zaznati.

Mehanika, ki jo Git uporablja za to kontroliranje vsot se imenuje SHA-1 zgoščena vrednost. 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 Git-u. Zgoščena SHA-1 vrednost izgleda nekako takole:

24b9da6552252987aa493b52f8696cd6d3b00373

Te zgoščene vrednosti boste videli v Git-u vse povsod, 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 delate akcije v Git-u, 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 podatke na kakršen koli način. Kot v kateremkoli VCS-ju, lahko izgubite ali pokvarite spremembe, ki jih še niste poslali; vendar ko pošljete posnetek v Git, je zelo težko kaj izgubiti, posebej, če pogostokrat pošljete vašo podatkovno bazo v drug repozitorij.

To naredi uporabo Git-a užitek, ker vemo, da lahko experimentiramo brez nevarnosti po resnih uničenjih stvari. Za bolj poglobljen pogled na to, kako Git shranjuje svoje podatke in kako lahko povrnete podatke, ki se zdijo izgubljeni, gletjte Razveljavljanje stvari.

Tri stanja

Sedaj, bodite pozorni. To je glavna stvar, ki si jo morate zapomniti o Git-u, če želite, da gre preostanek procesa učenja gladko. Gi ima tri glavna stanja, v katerih vaše datoteke lahko obstajajo: poslane (commited), spremenjene (modified) in dane v vmesno fazo (staged). Poslano pomeni, da so podatki varno shranjeni v vaši lokalni podatkovni bazi. Spremenjeno pomeni, da ste spremenili datoteko, vendar je še niste poslali v vašo podatkovno bazo. Uprizorjeno pomeni, da ste označili spremenjeno datoteko v njeni trenutni verziji, da gre v naslednji posnetek pošiljanja.

To nas vodi k trem glavnim sekcijam Git projekta: Git direktorij, delovni direktorij in vmesno področje.

Working directory, staging area, and Git directory.
Figure 6. Working directory, staging area, and Git directory.

Git direktorij je, kjer Git shranjuje meta podatke in objektno podatkovno bazo za vaš projekt. To je najpomembnejši del Git-a in je, kar je kopirano, ko klonirate repozitorij iz drugega računalnika.

Delovni direktorij je en sam prenos ene verzije projekta. Te datoteke so potegnjene iz kompresirane podatkovne baze v Git direktoriju in podane na disk za vas, da jih uporabite ali spremenite.

Uprizoritveno področje je datoteka, v splošnem vsebovana v vašem Git direktoriju, ki shranjuje informacije o tem, kaj bo šlo v vaše naslednje pošiljanje. Včasih je sklicano kot ``index``, vendar je tudi pogosto sklicano kot vmesno področje.

Osnovni Git potek dela gre nekako takole:

  1. Spremenite datoteke v vašem delovnem direktoriju.

  2. Datoteke date v vmesno fazo, dodate njihove posnetke v vaše vmesno področje.

  3. Jih pošljete, kar vzame datoteke kakršne so v vmesnem področju in shrani ta posnetek dokončno v vaš Git repozitorij.

Če določena verzija datoteke je v Git direktoriju, je smatrana za poslano. Če je spremenjena, vendar je bila dodana v vmesno področje, je dana v vmesno fazo. In če je bila spremenjena odkar je bila prenesena, vendar ni bila dana v vmesno fazo, je spremenjena. V poglavju Osnove Git se boste naučili več o teh stanjih in kako jih lahko ali koristite ali preskočite vmesno fazo v celoti.