Git

**Git** — bul fayllardıń versiyaların baqlaytuǵın tarqatılǵan versiyalardı basqarıw sisteması. Ol kóbinese programmalıq támiynattı birlesip isleytuǵın baǵdarlamashılar derek kodın basqarıw ushın qollanıladı.

Gittiń dizayn maqsetleri tezlik, maǵlıwmatlar tutaslıǵı hám tarqatılǵan, sızıqlı emes jumıs proceslerin qollawdı qamtıydı — hár túrli kompyuterlerde jumıs isleytuǵın mıńlaǵan parallel tarmaqlar.

Gittiń Linux yadrosınıń islep shıǵarıwshısı Linus Torvalds hám yadro islep shıǵarıwshılar tárepinen paydalanıw ushın jaratılǵan.

Kópshilik basqa tarqatılǵan versiyalardı basqarıw sistemaları sıyaqlı hám klient-server sistemalarınıń kópshiliginen ayırmashılıǵı, Git tarmaqqa kiriwge yamasa oraylıq serverge ǵárezsiz tariyx hám versiyalardı baqlaw imkaniyatları bar, repozitoriydiń jergilikli kóshirmesin, repo dep ataydı. Repo hárbir kompyuterde versiyalardı basqarıw imkaniyatların támiyinlew ushın qosımsha, jasırın faylları bar standart katalogqa saqlanadı. Git tariyxı menen baylanıstırılǵan repolar arasındaǵı ózgerislerdi sinxronlaw imkaniyatların usınadı; bir-birinen kóshirilgen (klonlanǵan). Birge islesiw ushın Git aralıqtaǵı mashinalardaǵı repolar menen sinxronlawdı qollaydı. Barlıq repolar (birdey tariyxı bar) bir-birine teń bolsa da, islep shıǵarıwshılar biriktirilgen kóshirmeni saqlaw ushın oraylıq serverdi reponıń xostigi retinde jiyi paydalanadı.

Git − tek GPL-2.0 licenziyası boyınsha birge paydalanatuǵın biypul hám ashıq kodlı programmalıq támiynat.

«Git» sawda belgisin Software Freedom Conservancy tárepinen dizimge alınǵan, bul onıń rásmiy tán alınıwın hám ashıq kodlı jámiyetshilikke dawam etetuǵın evolyuciyasın bildiredi.

Házirgi waqıtta Git — anıq standart  versiyanı basqarıw sisteması. Bul eń ataqlı tarqatılǵan versiyanı basqarıw sisteması, islep shıǵarıwshılardıń 95%-ke shamalası onı 2022-jılǵı jaǵday boyınsha tiykarǵı versiyalardı basqarıw sisteması retinde xabarladı. Bul kásiplik baǵdarlamashılar arasında eń kóp qollanılatuǵın derek kodın basqarıw quralı. Git repozitoriy xızmetleriniń usınısları bar, sonıń ishinde GitHub, SourceForge, Bitbucket hám GitLab.

## Tariyxı
Torvalds Git-ti 2005-jıl aprelde Linux yadrosın islep shıǵıw ushın paydalanatuǵın menshikli derekti basqarıw (SCM) sistemasına arnalǵan biypul licenziyasınıń BitKeeper Linux jaratıwı ushın kúshin joytqannan keyin basladı. BitKeeper avtorlıq huqıq iyesi Larri MakVoy Endryu Tridjell BitKeeper protokolların keri injeneriyalaw arqalı SourcePuller tárepinen jaratılǵanın málimledi. Tap usı waqıya Mercurial basqa versiyanı basqarıw sistemasın jaratıwǵa túrtki boldı.

Torvalds BitKeeper sıyaqlı paydalana alatuǵın bólistirilgen sistemanı qáleydi, biraq qoljetimli biypul sistemalardıń heshqaysısı onıń mútájliklerin qanaatlandırmadı. Ol patchtı qollanıw hám barlıq baylanıslı metamaǵlıwmatlardı jańalaw ushın 30 sekundtı talap etetuǵın derekti basqarıw sistemasına mısal keltirdi hám bul Linux yadrosınıń rawajlanıwınıń mútájliklerine sáykes kelmeytuǵının atap ótti, bunda basqa qollawshılar menen bir ret sinxronlaw keyingi waqıtta 250 usınday háreketti talap etiwi múmkin. Dizayn kriteriyası ushın ol patching úsh sekundtan aspawı kerek ekenin kórsetti hám taǵı úsh maqset qostı:

* Concurrent Versions System (CVS)-di qollanıw usılı neni islemew kerekligin mısal retinde qarań; eger gúmanlansańız, dál qarsı sheshim qabıllań.
* Tarqatılǵan, BitKeeper-ge uqsas jumıs procesin qollap-quwatlań.
* Tosınnan yamasa zıyanlı korrupciyaǵa qarsı júdá kúshli qorǵaw quralların qosıń.

Bul kriteriyalar sol waqıtta paydalanıwda bolǵan hárbir versiyanı basqarıw sistemasın joq etti, sonlıqtan 2.6.12-rc2 Linux yadrosın islep shıǵarılıwınan keyin birden Torvalds óziniń jeke versiyasın jazıwǵa kiristi.

2005-jıl 3-aprelde Gittiń islep shıǵarıwı baslandı. Torvalds 6-aprelde proektti járiyaladı hám keyingi kúni ózin-ózi xostingke qoydı. Birneshe filiallardıń birinshi birlesiwi 18-aprelde ámelge asırıldı. Torvalds óziniń ónimlilik maqsetlerine eristi; 29-aprelde payda bolǵan Git sekundına 6,7 patch tezligi menen Linux yadrosınıń teregine jazıw patchların salıstırdı. 16-iyunda Git yadrosınıń 2.6.12 shıǵarılımın basqardı.

Torvalds texnikalıq xızmet kórsetiwdi 2005-jıl 26 iyulda proektke tiykarǵı úles qosqan Djunio Xamanoǵa tapsırdı. Xamano 2005-jılı 21 dekabrde 1.0 shıǵarılımına juwapker boldı.

### Atalıwı
Torvalds git degen atqa (britan inglis tilinen awdarǵanda «jaǵımsız adam» degendi bildiredi) mısqıllap kúldi: “Men ózimshil axmaqpan, men barlıq proektlerimdi óz atım menen atayman. Aldı menen «Linux», endi «git»” Aldı menen «Linux», endi «git»”. Adam beti *(Unix: man page)* Git-ti «axmaq kontentti baqlawshı» retinde táriyipleydi.

Derek kodtıń meni oqıw faylın jáne de tolıqtıradı:

«git» siziń kewil-xoshıńızǵa baylanıslı hár qanday nárseni bildiriwi múmkin.

* Hár qanday ulıwma UNIX buyrıǵınan anıq paydalanılmaytuǵın hám aytıwǵa bolatuǵın úsh háripli tosınnan kombinaciya. Bul «alıw» sóziniń qáte aytılıw faktı zárúr bolıwı múmkin yamasa bolmawı múmkin.
* Axmaq. Mensinbeytuǵın hám jeksurın. Ápiwayı. Jargon sózliginen óz tańlawıńızdı alıń.
* «Global informaciya trekeri»: siziń kewil-xoshıńız jaqsı hám ol siz ushın jumıs isleydi. Perishteler qosıq aytıp, bólmeni birden jaqtılıq toltıradı.

Git-tiń derek kodı programmanı «duzaqtan kelgen informaciya menedjeri» dep ataydı.

## Xarakteristikaları

### Dizayn (proektlestiriw)
Git dizaynı Torvaldstıń úlken úlestirilgen islep shıǵıw proektin qollawdaǵı Linux penen tájiriybesiniń sintezi, sonıń menen qatar onıń sol proektten alınǵan fayl sistema ónimliligi tuwralı jaqın bilimi hám qısqa múddette jumıs sistemasın jaratıwdıń operativ zárúrligi. Bul tásirler keyingi ámelge asırıw tańlawlarına alıp keledi:

; Sızıqlı emes rawajlanıwǵa kúshli qollap-quwatlaw
: Git tez tarmaqlanıw (branch) menen birlestiriwdi qollaydı hám sızıqlı emes rawajlanıw tariyxın vizuallastırıw hám navigaciyalaw ushın arnawlı qurallardı qamtıydı. Gitte, tiykarǵı túsinik, ózgerisler kóplegen shólkemlestiriwshi tárepinen tarqatılatuǵın bolǵanlıqtan, ol jazılǵanǵa qaraǵanda kóbirek birlestiriletuǵını. Gitte filiallar (branch) júdá jeńil: filial tek bir commitke silteme bolıp tabıladı.
; Tarqatılǵan islep shıǵarıw
: Darcs, BitKeeper, Mercurial, Bazaar hám Monotone sıyaqlı, Git hárbir islep shıǵarıwshıǵa tolıq rawajlanıw tariyxınıń jergilikli kóshirmesin beredi hám ózgerisler usı repozitoriydan ekinshisine kóshiriledi. Bul ózgerisler qosılǵan rawajlanıw filialları retinde importlanadı hám jergilikli rawajlanǵan filial sıyaqlı birlestiriledi..
; Bar sistemalar menen protokollar menen úylesimlilik
: Repozitoriyalardı Hypertext Transfer Protocol Secure (HTTPS), Hypertext Transfer Protocol (HTTP), File Transfer Protocol (FTP) yamasa jıynaq soket yamasa Secure Shell (ssh) arqalı Git protokolı arqalı járiyalawǵa boladı. Git sonday-aq CVS server emulyaciyasına iye, bul CVS klientlerin hám IDE plaginlerin Git repozitoriyalarına kiriw ushın qollanıwǵa imkaniyat beredi. Subversion repozitoriyaların tikkeley git-svn menen paydalanıwǵa boladı.
; Úlken proektlerdi ónimli qayta islew
: Torvalds Git-ti júdá tez hám masshtablanatuǵın dep sáwlelendirdi, hám Mozilla tárepinen ámelge asırılǵan ónimlilik testleri Git-tiń ulıwma repozitoriyalardıń ayırıwında Mercurial hám GNU Bazaar-ǵa qaraǵanda on ese tez ekenin kórsetti; jergilikli saqlanǵan repozitoriydan versiya tariyxın alıw, olardı aralıq serverden alıwǵa qaraǵanda júz ese tez bolıwı múmkin.
; Tariyxtıń kriptografiyalıq túrde autentifikaciyası
: Git tariyxı usılayınsha saqlanadı, bunda belgili bir versiyanıń ID-si (Git terminlerinde commit) sol commitke ákelgen tolıq rawajlanıw tariyxına baylanıslı. Ol járiyalanǵannan keyin, onı bayqamay, eski versiyaların ózgertiw múmkin emes. Struktura Merkle teregine uqsas, biraq túyinler menen japıraqlarda qosımsha maǵlıwmatlar qosılǵan. (Mercurial hám Monotone da usı qásiyetke iye).
; Qural jıynaǵına tiykarlanǵan dizayn
: Git − bul programmalar jıynaǵı retinde dizaynlanǵan, ol C-de jazılǵan hám usı programmalarǵa oqıw qabıq skriptleri beriledi. Bul skriptlerdiń kópshiligin tezlik penen portativlik ushın C-de qayta jazǵan bolsa da, dizayn saqlanǵan, hám komponentlerdi bir-birine biriktiriw ańsat.
; Qosımsha birlestiriw strategiyaları
: Qural jıynaǵı dizaynınan bólek, Git tolıq emes birlestiriw modelin jaqsı anıqlaǵan hám olardı tamamlaw ushın birneshe algoritmlerge iye, onıń nátiyjesinde paydalanıwshıǵa birlestiriwdı avtomat túrde tamamlay almaw hám qol menen redaktorlaw kerekligin aytadı.
; Shıǵındı jıynalǵanǵa shekem jıynaladı
: Háreketlerdi toqtatıw yamasa ózgertiwlerdiń saqlıq kóshirmesin jaratıw maǵlıwmatlar bazasında paydasız salbırap turan obyektlerdi qaldıradı. Olar ádette izlew obyektleriniń úziliksiz ósken tariyxınıń kishi bólimi bolıp tabıladı. Git repozitoriyaǵa jetkilikli bos obyektler jaratılǵanda avtomat túrde shıǵındı jıynawdı orınlaydı. Shıǵındı jıynawdı git gc járdemi menen tikkeley shaqırıwǵa boladı.
; Múddetli ayqın obyektti paketlew
: Git hárbir jańadan jaratılǵan obyektti jeke fayl retinde saqlaydı. Jeke qısılǵanı menen, bul kóp júz beredi hám ónimsiz. Bul paket faylı dep atalatuǵın bir faylda (yamasa tarmaqlıq bayt aǵımında) bir-birine detal arqalı qısılǵan kóplegen obyektlerdi saqlaytuǵın paketlerdi paydalanıw arqalı sheshiledi. Paketler durıslıǵına baylanıslı emes, atlas fayllar uqsas bolıwı múmkin evristika arqalı qısıladı. Paket faylındaǵı hárbir obyekttiń jıljıwın kórsetetuǵın hárbir paket faylı ushın sáykes indeks faylı jaratıladı. Jańadan jaratılǵan obyektler (jańadan qosılǵan tariyxı bar) ele de jeke obyektler retinde saqlanadı hám keńislik ónimliligin saqlaw ushın múddetli qayta paketlew kerek. Repozitoriydi paketlep-túyiw procesi júdá kóp esaplawdı talap etedi. Obyektlerdiń repozitoriyinde bos, biraq tez jaratılǵan formatda bolıwın támiyinlep, Git qımbat paket operaciyasın waqıt azıraq, mısalı jumıs kúniniń sońına shekem keyinge qaldırıwǵa imkaniyat beredi. Git múddetli qayta paketlewdi avtomat túrde jaratadı, biraq qol menen qayta paketlew `git gc` buyrıǵı menen de múmkin boladı. Maǵlıwmatlar tutaslıǵı ushın paket faylında da, onıń indeksinde de SHA-1 baqlaw summası bar al paket faylınıń fayl atına da SHA-1 baqlaw summası bar. Repozitoriydiń tutaslıǵın tekseriw ushın `git fsck` buyrıǵın iske qosıń.

Gittiń taǵı bir qásiyeti − ol fayllar katalog tereklerin súwretke túsiredi. Dáslepki derek kodtıń versiyaların baqlawdıń eń jaqsı sistemaları, Source Code Control System (SCCS) hám Revision Control System (RCS) jeke fayllar menen jumıs islep, (kóbinese uqsas) versiyalardı qaytalanatuǵın deltalardı (SCCS) yamasa delta kodlawdı (RCS) paydalanıw arqalı alınatuǵın keńislikti únemlewge itibar qarattı. Keyinirek qayta qarawdı basqarıw sistemaları proekttiń birneshe revisiyalarında fayldıń identifikacıyası bar ekenligi tuwralı bul túsinikti saqladı. Biraq, Torvalds bul koncepciyanı biykarladı. Demek, Git derek kodı tarmaǵınıń astındaǵı hár qanday dárejede fayllardı qayta qaraw qatnasların anıq jazbaydı.

### Maǵlıwmatlar strukturaları
Git primitivleri derek kodın basqarıw sisteması emes. Torvalds túsindiredi:

Kóplegen jollar menen siz git-ti fayl sisteması retinde ǵana kóre alasız — bul kontentti adreslewge boladı hám onıń versiyalaw tuwralı túsinigi bar, biraq men onı fayl sisteması adamnıń kózqarası boyınsha máselege baylanıslı proektlestirdim (háy, yadro menen shuǵıllanaman), hám mende dástúrli SCM sistemasın jaratıwǵa ulıwma qızıǵıwshılıq joq

Usı dáslepki dizayn usılınan Git dástúrli SCM kútiletuǵın imkaniyatlardıń tolıq jıynaǵın islep shıqtı, imkaniyatları negizinen kerek bolǵan jaǵdayda islenedi, sonnan keyin anıqlanadı hám waqıt ótip keńeytiledi.

Git eki maǵlıwmatlar strukturasına iye: jumıs katalogı hám orınlanatuǵın keyingi dúzetiw tuwralı informaciyanı keshleytuǵın ózgermeli indeks (basqısh yamasa kesh dep ataladı); hám ózgermeytuǵın obyektlerdi saqlaytuǵın maǵlıwmatlar bazası

Indeks obyektiniń maǵlıwmatlar bazası menen jumıs teregi arasındaǵı baylanıs noqatı retinde xızmet etedi.

Obyektler saqlaǵıshı obyektlerdiń bes túrin óz ishine aladı:

* **Blob** — bul fayldıń mazmunı. Bloblar durıs fayl atına, waqıt belgilerine yamasa basqa metamaǵlıwmatlarǵa iye emes (blob atı ishki túrde onıń mazmunınıń xesh-i bolıp tabıladı). Gitte hárbir blob — bul fayldıń bir versiyası, onda fayldıń maǵlıwmatları bar..
* **Terek obyekti** − katalogǵa ekvivalent. Ol fayl atlarınıń dizimin óz ishine aladı, hárqaysısı ayırım tipli bitler menen sol faylǵa, simvollıq baylanısqa yamasa katalog mazmunına silteme bar. Bul obyektler derek tereginiń súwretin bildiredi. (Tutas alǵanda, bul Merkle teregin qamtıydı, yaǵnıy tek túbir tereginiń bir ǵana xesh summası jetkilikli hám is júzinde barlıq sanlı sub-kataloglar menen fayllardıń tolıq terek strukturalarınıń anıq jaǵdayına dál belgilew ushın commitlarda qollanıladı.)
* **Commit** obyekti terek obyektleriniń tariyxqa baylanıslı bolıwın támiyinleydi. Ol terek obyektiniń atın (joqarı dárejeli derek katalogınıń), waqıt belgisiniń, jurnal xabarınıń hám nolden kóp yamasa onnan da kóp az ata-analıq commit obyektleriniń atın óz ishine aladı.
* **Teg** obyekti basqa obyektke siltemeni qamtıytuǵın konteyner bolıp, basqa obyektke baylanıslı qosılǵan metamaǵlıwmatlardı saqlaw imkaniyatına iye. Kóbinese ol Git arqalı baqlanatuǵın maǵlıwmatlardıń belgili bir shıǵarılımına sáykes keletuǵın commit obyektiniń cifrlı qoltamǵasın saqlaw ushın qollanıladı.
* **Paket** **faylı** obyekti túrli basqa obyektlerdi ıqshamlıq penen tarmaq protokolları arqalı ańsat tasıw ushın zlib arqalı qısılǵan paketke jıynaydı.

Hárbir obyekt onıń mazmunınıń SHA-1 xeshi menen anıqlanadı. Git xeshti esaplaydı hám bul mánisti obyekttiń atı ushın paydalanadı. Obyekt onıń xeshiniń birinshi eki simvolına sáykes keletuǵın katalogqa jaylasqan. Xeshtiń qalǵan bólegi sol obyekttiń fayl atı retinde qollanıladı.

Git fayldıń hárbir versiyasın unikal blob retinde saqlaydı. Bloblar arasındaǵı qatnaslardı terek hám commit obyektlerin tekseriw arqalı tabıwǵa boladı. Jańadan qosılǵan obyektler zlib qısıw usılı menen tolıq kóriniste saqlanadı. Bul disk keńisliktiń úlken kólemin tez tutınıwı múmkin, sonlıqtan obyektlerdi basqa bloblarǵa baylanıslı ózgerisler retinde saqlap, keńislikti únemlew ushın delta qısıwın paydalanatuǵın paketlerge biriktiriwge boladı.

## Derekler

__BÖLİDİMÖNDEMEW__