Git
Chapters ▾ 2nd Edition

1.3 Почетак - Шта је Гит?

Шта је Гит?

Па, шта је у суштини Гит? Веома је важно схватити овај одељак, јер ако разумете шта је Гит и основе његовог функционисања, онда ће вам бити много једноставније да ефикасно користите програм Гит. Док учите програм Гит, пробајте да заборавите на ствари које знате о многим другим VCS системима као што су Subversion и Perforce; на тај начин ћете избећи неке суптилне недоумице док користите овај алат. Програм Гит чува и посматра податке на много другачији начин од осталих система, иако је његов кориснички интерфејс веома сличан њиховом, а разумевање тих разлика ће помоћи да не дође до забуне током коришћења.

Снимци, не разлике

Главна разлика између програма Гит и других VCS система (укључујући Subversion и екипу) је начин на који Гит посматра податке. Концептуално, већина других система чува податке као листу промена фајлова. Ови системи (CVS, Subversion, Perforce, Bazaar и тако даље) посматрају податке које чувају као скуп фајлова и промена које су направљене над њима током времена (ово се обично описујекао контрола верзије базирана на делтама).

Чување података као промене у односу на основну верзију сваког фајла
Слика 4. Чување података као промене у односу на основну верзију сваког фајла

Програм Гит не посматра податке на овај начин, нити их тако памти. Уместо тога, програм Гит посматра податке као да су скуп снимака (snapshots) минијатурног фајл система. Сваки пут када извршите комит (commit), или сачувате стање свог пројекта у Гит репозиторијум, он у суштини узима слику стања ваших фајлова у том тренутку и памти референцу на тај снимак. Да би одржао ефикасност, ако се фајл није променио, програм Гит не чува фајл поново, већ само везу ка претходном идентичном фајлу који је већ раније сачувао. Програм Гит податке посматра као ток снимака.

Чување података као снимака пројекта током времена
Слика 5. Чување података као снимака пројекта током времена

Ово је важна разлика између програма Гит и скоро свих других VCS система. Због овога Гит скоро сваки аспект контроле верзије који су већина осталих система само копирали из претходне генерације посматра на другачији начин. То чини Гит минијатурним фајл системом са уграђеним изузетно моћним алатима, а не само обичним VCS системом. Истражићемо неке предности које добијате чистим посматрањем података на овај начин док будемо говорили о гранању у програму Гит у Гранање у програму Гит.

Скоро свака операција је локална

Већини операција у програму Гит су потребни само локалне фајлове и ресурси да би се извршиле - у општем случају, није потребна никаква информација са другог рачунара на мрежи. Ако сте навикнути на CVCS системе где већина операција има застој због латенције мреже, овај аспект Гита ће вас уверити у то да су богови брзине благосиљали Гит ванземаљским моћима. Пошто имате читаву историју пројекта одмах ту на локалном диску, већина операција ће се извршити скоро тренутно.

На пример, да бисте прегледали историју пројекта, Гит не мора да оде на сервер да је преузме да би вам је приказао — само треба да је прочита директно из локалне базе података. Ово значи да ћете видети историју пројекта истог тренутка. Ако желите да видите измене које су унете у фајл између тренутне верзије и оне од пре месец дана, Гит може да погледа како је фајл изгледао пре месец дана и да уради локално израчунавање разлике, уместо да пита удаљени сервер да уради то или да повуче старију верзију фајла са удаљеног сервера и да израчуна разлику локално.

Ово такође значи да нема много ствари које не можете да урадите док нисте прикачени на мрежу или на VPN. Ако се укрцате на авион или воз и желите да урадите нешто, можете да комитујете без проблема (у своју локалну копију, сећате се?) све док не дођете до мрежне конекције да гурнете податке на сервер. Ако одете кући и не можете да подесите VPN клијент да ради како треба, још увек можете да радите на пројекту. Код многих других система, овакве ствари су немогуће или захтевају превише муке. На пример, у програму Perforce не можете да урадите много тога ако нисте повезани са сервером; а у програмима Subversion и CVS можете да мењате фајлове, али не можете да комитујете промене у базу података (јер она није на мрежи). Ово можда не изгледа као велика ствар, али изненадили бисте се када видите колико овакве ствари значе.

Гит има интегритет

У програму Гит се за све рачуна контролна сума (checksum) пре него што се сачува, а онда се стварима приступа користећи ту контролну суму. То значи да је немогуће променити садржај било ког фајла или директоријума а да Гит не зна за то. Ова функционалност је уграђена у Гит у најнижим слојевима и својствена је његовој филозофији. Не можете да изгубите податке током транзита, или да дође до оштећења фајлова а да Гит то не примети.

Механизам који програм Гит користи за контролну суму се зове SHA-1 хеш (SHA-1 hash). То је стринг од 40 карактера који се састоји од хексадецималних цифара (0-9 и a-f) и рачуна се на основу садржаја фајла или структуре директоријума у програму Гит. SHA-1 хеш изгледа отприлике овако:

24b9da6552252987aa493b52f8696cd6d3b00373

Ове хеш вредности ћете сретати посвуда у програму Гит јер их он доста користи. Заправо, све што програм Гит чува у базу података чува се на основу хеш вредности садржаја, а не на основу имена фајла.

Гит углавном само додаје податке

Када обављате акције у програму Гит, скоро све само додају податке у Гит базу података. Тешко је натерати систем да уради нешто што не може да се опозове, или да обрише податке на било који начин. Као и код било ког другог VCS система, можете да направите грешку код промена које још нису комитоване; али након што комитујете снимак у Гит, веома је тешко изгубити га, поготово ако редовно шаљете базу података другом репозиторијуму.

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

Три стања

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

  • Измењено значи да сте променили фајл али да га још увек нисте комитовали у базу података.

  • Стејџовано значи да сте измењени фајл означили да се у свом тренутном стању укључи у следећи комит снимка који будете направили.

  • Комитовано значи да су подаци смештени у локалну бази података на сигурном.

Ово нас води до три главне секције Гит пројекта: Гит директоријум, радни директоријум и стејџ.

Радни директоријум, стејџ и Гит директоријум.
Слика 6. Радни директоријум, стејџ и Гит директоријум

Радни директоријум је једно одјављивање (checkout) неке верзије пројекта. Ови фајлови се довлаче из компресоване базе података из Гит директоријума и смештају се на диск да бисте их користили и мењали.

Стејџ је фајл који се обично налази у Гит директоријуму и чува информације о томе шта ће се укључити у следећи комит. Његово техничко име у Гит терминологији је „индекс”, али се често користи и назив „стејџ”.

Гит директоријум је место где програм Гит чува све метаподатке и базу података објеката вашег пројекта. Ово је најважнији део програма Гит и то је оно што се копира када клонирате репозиторијум са другог рачунара.

Основни ток рада са програмом Гит иде отприлике овако:

  1. Вршите измене фајлова у радном директоријуму.

  2. Селективно стејџујете само оне измене које желите да буду део наредног комита, што додаје само те измене на стејџ.

  3. Комитујете, што значи да узмете фајлове у оној верзији у којој су били када сте их додали на стејџ и тај снимак трајно смештате у Гит директоријум.

Ако се нека верзија фајла налази у Гит директоријуму, сматра се комитованом. Ако је измењена и онда додата на стејџ, она је стејџована. А ако се променила од одјављивања, али није стејџована, онда је измењена. У Основе програма Гит, научићете више о овим стањима и о томе како се најбоље користе, као и начин да потпуно прескочите стејџ.