Git
Chapters ▾ 2nd Edition

1.3 Иш бошланиши - Git асоси

Git асоси

Хўш Git бир оғиз сўз билан айтганда нима ўзи? Бу қисмни ўзлаштириш муҳим, агарда сиз, Git нима ва унинг ишлаш услублари қанақалигини тушунсангиз ундан самарали фойдаланишингизда сизга онсон бўлади. Git ни ўрганиш давомида бошқа Subversion ёки Perforce каби ТБТ лари ҳақида билганларингизни барчасини унутишга ҳаракат қилинг. Git да фойдаланувчи ойнаси бошқа ТБТ ларники каби бўлгани билан ундаги ахборотлар ва ахборот устидаги ишлар бошқа тизимлардагидек эмас. Бу фарқлар ҳақидаги билимингиз сизни Git билан ишлаш давомида адашишдан ҳимоялайди.

Нусхалар патчлар ўрнига

Git нинг бошқа ТБТ (масалан, Subversion ва унга ўхшаш) лардан асосий фарқи – бу Git нинг маълумотларга қандай қараши. Кўпчилик бошқа тизимлар ахборотларни файлларнинг ўзгариш(патч)лари рўйҳати кўринишида сақларди. Бундай тизимлар (CVS, Subversion, Perforce, Bazaar ва бошқалари) расмда кўрсатилганидек ҳар бир файлга ўзгартириш киритиш вақтида сақланувчи маълумотларга файллар ва ўзгаришлар тўплами сифатида қарайди.

Бошқа тизимлар маълумотларни ҳар бир файл учун асос талқинларининг ўзгариши кўринишида сақлайди.
Figure 4. Бошқа тизимлар маълумотларни ҳар бир файл учун асос талқинларининг ўзгариши кўринишида сақлайди.

Git ўз маълумотларини бундай кўринишда сақламайди. Бунинг ўрнига Git сақланувчи маълумотларни катта бўлмаган файллар тизимининг нусхалари тўплами сифатида қарайди. Ҳар сафар сиз лойиҳанинг жорий талқинини фиксирлаган вақтингизда Git айни вақтда лойиҳанинг барча файллар нусхаларини сақлайди. Самарадорликни ошириш мақсадида файл ўзгартирилмаган бўлса бундай файлларни нусхасини яратиш ўрнига аввалги сақланган нусхага тегишли йўлланмани яратади. Ушбу жараён расмда ифодаланган.

Git маълумотларни маълум бир вақтдаги ҳолатларини нусхаси кўринишида сақлайди.
Figure 5. Git маълумотларни маълум бир вақтдаги ҳолатларини нусхаси кўринишида сақлайди.

Бу Git ва деярли барча бошқа талқинларни бошқарувчи тизимлар орасидаги муҳим фарқдир. Шу туфайли Git ҳар бир талқинларни бошқариш тизимининг турли хил ёндашувларини кўриб чиқишга мажбур ва бу ҳислатни бошқа тизимлар ҳам Git дан олишган. Git оддий ТБТ дан кўра кўпроқ катта бўлмаган файллар тизимига ўхшайди. У бу тизим устидан ишлай оладиган кучли ускуналарига эга. Git да тармоқланиш даги Git да тармоқлар билан ишлаш мавзусига келганимизда биз маълумотларни бундай тушуниш қандай ютуқлар беришини билиб оламиз.

Деярли барча амаллар - маҳаллий

Кўп амалларни бажариш учун Git га фақат маҳаллий файл ва манбалар зарур, шунингдек одатда тармоқдаги ўзга компьютерлардаги маълумот ҳам керак эмас. Агар сиз тармоқдаги ушланиб қолишларга боғлиқ бўлган марказлаштирилган тизимлар билан ишлаган бўлсангиз Git ни ишлатиб анча ўзингизни енгил ҳис қилишингиз тайин. Сабаби лойиҳанинг бутун тарихи сизнинг маҳаллий дискингизда сақланади ва кўп амаллар бир зумда бажарилади.

Мисол учун тарихни кўрсатиш учун Git уни сервердан юклаб олмайди балки сизнинг маҳаллий омборингиздан ўқиб кўрсатади. Шунинг учун тарихни бир зумда кўришингиз мумкин. Агар сизга жорий ва бир ой олдинги талқинлар орасидаги ўзгаришни кўриш керак бўлса, ТБТ серверидан фарқни сўраш ёки ундан эски файлни юклаб олиб кейин маҳаллий солиштиришни амалга ошириш ўрнига Git бир ой олдинги файлни (маҳаллий дискдан) олиб орасидаги фарқни шу жойнинг ўзида ҳисоблаб бера олади.

Бундан ташқари маҳаллий ишлаш тармоққа ёки VPN га ҳуқуқ бўлмаса ҳам анча иш қилиш мумкинлигини англатади. Агарда сиз самолётда ёки поездда бўлсангиз ва ишлашни хоҳласангиз бемалол ўзгаришларни сақлаб ва тармоққа уланиш имконияти пайдо бўлганидан кейин бу ўзгаришларни серверга жўнатишингиз мумкин бўлади. Агар сиз уйга келсангиз ва VPN мижоз дастури ишламаса барибир ишлашни давом эттиришингиз мумкин. Кўпчилик бошқа тизимларда бундай имконият йўқ ёки бўлсада қулай эмас. Масалан, Perforce ни ишлатган ҳолда серверга уланмасдан жуда ҳам кам ишларни қила оласиз. Subversion ва CVS лар билан ишлаб файлларни таҳрирлаш мумкин, лекин ўзгаришларни маълумотлар омборига сақлаш мумкин эмас(сабаби у омбордан узилган). Деярли ҳеч нарса эмасдек, бироқ сиз кейинчалик бу қанчалик ишга таъсир қилишининг гувоҳи бўласиз.

Git – маълумотларнинг бутунлигини таъминланишини кузатади

Git ихтиёрий файлларни сақлашдан олдин текширув йиғиндисини (контрольную сумму) ҳисоблаб чиқади ва бу файлнинг индекси бўлиб хизмат қилади. Шунинг учун файл ёки папка ичидагиларни Git билмайдиган тарзда ўзгартириб бўлмайди. Git нинг бу функцияси унинг асоси сифатида қурилган бўлиб, фалсафасининг муҳим ташкил этувчиларидан бири ҳисобланади. Агар маълумотлар узатиш вақтида ёки дискда бузилса Git бу ҳақда доим ҳабар беради.

Git нинг текширув йиғиндисини ҳисоблашда ишлатадиган механизми SHA-1 хеш дея аталади. Бу 40 та ўн олтилик саноқ системасидаги белгидан (0-9 ва a-f) иборат бўлган сатр SHA-1 хеш тахминан қуйидагича кўринишга эга:

24b9da6552252987aa493b52f8696cd6d3b00373

Git билан ишлаб хеш кенг ишлатилганилиги боис доимий равишда сиз унга дуч келасиз. Аслида ҳам Git ўз маълумотлар омборида файлларни номлари билан эмас балки уларнинг ташкил этувчилари билан яратилган хешларини сақлайди.

Git га маълумотлар тез-тез фақат қўшилиб туради

Git да сиз қилаётган амалдаги ҳамма ҳаракатлар фақат маълумотларни омборга қўшади. Тизимни маълумотларни ўчиришга мажбурлаш ёки тизимда бирор қайтариб бўлмайдиган ишни қилиш жуда қийин. Бошқа ТБТ лар каби сақланмаган маълумотларни йўқотиш мумкин, бироқ уларни фиксирланганидан кейин йўқотиб қўйиш жуда қийин. Бу янада қийин агарда сиз ўзгаришларни бошқа омборга жўнатиб турсангиз.

Шунинг учун Git ни ишлатиш – кўнгил тўқлик, чунки ниманидир бузиб қўйишдан чўчимасдан бемалол тажриба ўтказиш мумкин. Git маълумотларни қандай сақлаши ҳақида батафсилроқ ва йўқотилган туюлаётган маълумотларни тиклаш тўғрисидаги маълумотларни олиш учун Ўзгаришларни бекор қилиш бўлимни ўқинг.

Уч ҳолат

Энди диққат. Бу кейинги ўрганишларингиз силлиқ кетиши учун Git ҳақида эсда сақлашингиз керак бўлганларидан энг муҳими. Git да файллар қуйидаги уч ҳолатдан бирида бўлиши мумкин: фиксирланган (committed), ўзгартирилган (modified) ва тайёрланган (staged). “Фиксирланган” файл сизнинг маҳаллий омборингизда сақланганлигини англатади. “Ўзгартирилган” файлларга ўзгартирилгану лекин фиксирланмаганлар киради. “Тайёрланган” файллар – бу ўзгартирилган файлларнинг навбатдаги жўнатишга (commit) ажратилганлари.

Шу тариқа Git ишлатилган лойиҳада уч қисм мавжуд: Git каталоги (Git directory), ишчи каталог (working directory) ва тайёрланган файллар соҳаси(staging area).

Ишчи каталог
Figure 6. Ишчи каталог, тайёрланган файллар соҳаси, Git каталоги.

Git каталоги – Git ни сизнинг лойиҳангиз объектларининг метамаълумотларини ва маълумотлар омборини сақлайдиган жойи. Бу Git нинг муҳимроқ қисми, айнан у сиз бошқа компьютердан омборни клонлаштираётган вақтингизда нусхаланади.

Ишчи каталог – бу сиқилган маълумотлар омборидан маълум бир талқиннинг кенгайтирилган нусхаси. Ушбу файллар Git каталоги сиқилган маълумотлар омборидан олинади ва уларни сиз кўришингиз ва ўзгартиришингиз учун дискка кўчирилади.

Тайёрланган файлларнинг соҳаси — бу оддий файл, одатда Git каталогида сақланади ва у ўзида навбатдаги жўнатишга нималар кириши ҳақидаги маълумотни сақлайди. Баъзида уни “index” деб аташади, лекин охирги пайтларда уни тайёрланган файллар соҳаси (stagingarea) деб аташ стандартга айланиб бормоқда.

Git дан фойдаланган ҳолатдаги стандарт иш жараёни қуйидагича кўринишда:

  1. Сиз ишчи каталогингизда файлларни ўзгартирасиз.

  2. Сиз тайёрланган файллар соҳасига файлларни нусхасини қўшиб уларни тайёрлайсиз.

  3. Сиз жўнатасиз. Бу пайтда нусхалар тайёрланган файллар соҳасидан Git каталогига сақланади.

Агар файлнинг ишчи талқини билан Git каталогидаги талқини мос келса файл фиксирланган ҳисобланади. Агар файл ўзгартирилган ва тайёрланган файллар соҳасига қўшилган бўлса у тайёрланган. Агарда файл маълумотлар омборидан юклаб олинганидан кейин ўзгартирилсаю ва тайёрланмаган бўлса у ҳолда у ўзгартирилган дейилади. Git асослари бўлимда сиз ушбу уч ҳолат ҳақида имкон қадар қандай ундан фойдаланиш ёки ушбу тайёргарликни ўтказиб юборишни батафсилроқ билиб олишингиз мумкин.