Git
Chapters ▾ 2nd Edition

10.1 Notranjost Git-a - Napeljava in porcelan

Morda ste preskočili na to poglavje iz prejšnjega poglavja ali ste morda prišli sem po branju preostanka knjige - v katerem koli primeru, to je, kjer bomo pokrili notranje delovanje in implementacijo Git-a. Ugotovili smo, da je učenje teh informacij v osnovi pomembno za razumevanje, kako uporaben in močan Git je, vendar ostali so nam trdili, da je lahko zmedeno in nepotrebno kompleksno za začetnike. Vseeno, smo naredili to diskusijo v zadnjem poglavju knjige, da ga lahko preberete prej ali kasneje v vašem procesu učenja. Odločitev prepuščamo vam.

Sedaj ko ste tu, pričnimo. Najprej, če ni še dovolj jasno, Git je v bistvu vsebinsko naslavljajoč datotečni sistem z VCS uporabniškim vmesnikom napisanim na vrhu njega. Nekoliko se boste o tem naučili, kaj to pomeni.

V zgodnjih dnega Git-a (večinoma pred 1.5) je bil uporabniški vmesnik veliko bolj kompleksen, ker je povdarjal ta datotečni sistem namesto poliranega VCS-ja. V zadnjih nekaj letih je bil UI rafiniran dokler ni postal kakor čist in enostaven za uporabo od katerega koli sistema na voljo; vendar pogostokrat stereotip ostaja o zgodnjem UI Git-a, da je kompleksen in težek se za naučiti.

Datotečni sistem naslavljanja vsebine je izjemno cool, torej bomo pokrili prvo to v tem poglavju; nato se boste naučili o mehanizmih transporta in opravilih vzdrževanja repozitorija, s katerimi se boste eventuelno morali ukvarjati.

Napeljava in porcelan

Ta knjiga pokriva, kako uporabljati Git s 30 ali nekaj glagoli, kot so checkout, branch, remote itd. Vendar ker je bil Git prvotno orodje za VCS, ima namesto polnega uporabniku prijaznega VCS-ja kopico glagolov, ki delajo nižje nivojsko delo in so bila načrtovana za veriženje skupaj v stilu UNIX-a oz. klicana iz skript. Ti ukazi so v splošnem imenovani kot ukazi “plumbing” in bolj prijazni ukazi so imenovani ukazi “porcelain”.

Prvih devet poglavij knjige se ukvarjajo skoraj ekskluzivno z ukazi porcelana. Vendar v tem poglavju se boste ukvarjali večinoma z nižje nivojskimi ukazi napeljave, ker vam dajo dostop do notranjega delovanja Git-a in pomagajo demonstrirati, kako in zakaj Git dela, kar dela. Mnogo teh ukazov ni mišljenih, da so uporabljeni ročno na ukazni vrstici vendar so bolj uporabljeni za gradnjo blokov za nova orodja in skripte po meri.

Ko poženete ukaz git init v novem obstoječem direktoriju, Git ustvari direktorij .git, kjer je locirano skoraj vse, kar Git shranjuje in manipulira. Če želite iti nazaj ali klonirati vaš repozitorij, kopirati ta posamezni direktorij nekam drugam, vam da skoraj vse, kar potrebujete. To celotno poglavje se v osnovi ukvarja s stvarmi v tem direktoriju. Tu je, kako izgleda:

$ ls -F1
HEAD
config*
description
hooks/
info/
objects/
refs/

Tam lahko vidite nekatere ostale datoteke, vendar to je sveži git init repozitorij - to je, kar vidite privzeto. Datoteka description je samo uporabljena s programom GitWeb, tako da ne skrbite o njem. Datoteka config vsebuje vaše nastavitvene opcije določenega projekta in direktorij info drži globalno izključitveno datoteko za ignorirane vzorce, ki jim ne želite slediti v datoteki .gitignore. Direktorij hooks vsebuuje vaše skripte kljuk klientne ali strežniške strani, ki so diskutirane v podrobnostih v Git kljuke.

To pusti štiri pomembne vnose: HEAD in (še za ustvariti) datoteko index in direktorija objects in refs. Te so deli jedra Git-a. Direktorij objects shranjuje vso vsebino za vašo podatkovno bazo, direktorij refs shranjuje kazalce v objekte pošiljanja v teh podatkih (branches) v datoteki HEAD, ki kaže na vejo, ki ste jo trenutno izpisali in datoteko index, kjer Git shranjuje informacije vaše vmesne faze. Sedaj boste pogledali vsako od teh sekcij v podrobnosti, da vidite, kako Git operira.