Git
Chapters ▾ 2nd Edition

10.1 Гит изнутра - Водовод и порцелан

Можда се скочили директно на ово поглавље са много ранијег, или сте можда стигли овде након што сте прочитали целу књигу — у сваком случају, овде ћемо да погледамо како програм Гит ради изнутра и како је имплементиран. Мислимо да је учење ових аспеката програма Гит од суштинске важности за разумевање колико је програм Гит користан и моћан алат, али неки су нам предочили да почетнике могу поприлично да збуне и да су им уводе непотребну сложеност. Зато смо нашли компромис и одлучили да ово буде последње поглавље у књизи како би сте могли да га прочитате пре или касније током процеса учења. На вама је да одлучите.

Сада када сте овде, време је да кренемо. Прво, ако ово још увек није јасно, програм Гит је у основи фајл систем који се адресира по садржају преко којег је написан VCS кориснички интерфејс. Ускоро ћете научити детаљније на шта се мисли под овиме.

У раним данима програма Гит (углавном пре верзије 1.5), кориснички интерфејс је био много сложенији јер је наглашавао фајл систем а не дотеран VCS. У последњих неколико година, КИ је толико унапређен тако да је његово коришћење постало чисто и једноставно као и коришћење било ког другог система; мада често и даље кружи стереотип из раних дана КИ програма Гит о томе како је превише сложен и тежак за учење.

Слој фајл система који се адресира садржајем је невероватно кул, па ћемо га првог обрадити у овом поглављу; затим ћете научити нешто о преносним механизмима и задацима везаним за одржавање репозиторијума у које ћете вероватно на крају крајева морати да се упустите.

Водовод и порцелан

Ова књига првенствено покрива како се програм Гит користи помоћу неких тридесетак подкоманди као што су checkout, branch, remote, и тако даље. Али пошто је програм Гит првобитно био алат система за котролу верзије, а не потпуни VCS једноставан за употребу, он има много других подкоманди који раде ствари на ниском нивоу и које су дизајниране тако да се уланчавају у Јуникс стилу, или да се позивају из скрипти. Ове команде се обично зову „водоводне команде”, а команде које су више пријатељски настројене корисницима се зову „порцеланске команде”.

Као што сте ди сада видели, првих девет поглавља књиге бавило се скоро искључиво порцеланским командама. Али у овом поглављу ћемо се бавити углавном водоводним командама ниског нивоа, јер вам омогућавају приступ унутрашњој страни програма Гит и помажу да се покаже како и зашто програм Гит ради оно што ради. Многе од ових команди нису предвиђење да се користе директно из командне линије, већ да се користе као градивни блокови нових алата и прилагођених скрипти.

Када извршите команду git init у новом или постојећем директоријуму, програм Гит креира директоријум .git и њему се налази све што програм Гит чува и чиме манипулише. Ако желите да сачувате резервну копију репозиторијума или да га клонирате, копирање овог једног директоријума на неко друго место је скоро све што вам је потребно. Цело ово поглавље се у суштини бави стварима које се налазе у овом директоријуму. Ево како изгледа свеже иницијализован .git директоријум.

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

У зависности од верзије програма Гит коју користите, можда ћете овде видети и неки други садржај, али ово је свеж git init репозиторијум — подразумевано би требало ово да видите. description фајл користи само програм GitWeb, тако да нема потребе да бринете о њој. Фајл config садржи конфигурационе опције специфичне за пројекат, а директоријум info чува глобални exclude фајл са шаблонима за игнорисање које не желите да пратите у .gitignore фајлу. Директоријум hooks садржи скрипте кука за клијентску и серверску страну, о којима се детаљно говори у Гит куке.

Стога нам преостају још четири битне ставке: фајлови HEAD и index (који ће тек бити креиран), као и директоријуми objects и refs. Они представљају срж програма Гит. Директоријум objects чува сав садржај базе података, директоријум refs чува показиваче на комит објекте из тих података (гране, ознаке, удаљени и још нешто), фајл HEAD показује на грану која је тренутно одјављена, а фајл index је мести у коме програм Гит чува информације о стејџу. Сада ћемо детаљно да погледамо сваки од ових делова, како бисмо разумели начин на који програм Гит ради.