**Git** (талаффузи "git"  ) як системаи идоракунии версияи тақсимшуда мебошад. Лоиҳа аз ҷониби Линус Торвалдс барои идоракунии таҳияи ядрои Linux сохта шуда буд, ки версияи аввал 7 апрели соли 2005 бароварда шуд; ҳамоҳангсоз - Jun Hamano .

Лоиҳаҳое, ки Git-ро истифода мебаранд, ядрои Linux, Swift, Android, Drupal, Cairo, GNU Core Utilities, Mesa, Wine, Chromium, Compiz Fusion, FlightGear, jQuery, PHP, NASM, MediaWiki, DokuWiki, шумораи тақсимоти Qt, Linux ва Linux-ро дар бар мегиранд. .

Барнома ройгон аст ва дар зери иҷозатномаи GNU GPL версияи 2 бароварда шудааст. Порти пешфарзи TCP 9418 аст.

Таърих
------

Таҳияи ядрои Linux дар системаи хусусии BitKeeper  анҷом дода шуд, ки онро муаллиф Ларри МакВой, худи таҳиягари Linux, ба лоиҳа таҳти иҷозатномаи ройгон пешниҳод кардааст. Таҳиягарон, барномасозони баландихтисос, якчанд утилитҳоро навиштанд ва барои яке , Эндрю Триҷелл формати интиқоли маълумот BitKeeper-ро баръакс таҳия карданд. Дар посух, МакВой таҳиягаронро дар вайрон кардани созишнома айбдор кард ва иҷозатномаро бозхонд ва Торвалдс системаи навро гирифт: ҳеҷ яке аз системаҳои кушод ба ҳазорон барномасозон имкон намедод, ки дар талошҳои худ ҳамкорӣ кунанд (ҳамон низоъ боиси навиштани Mercurial ). Идеология оддӣ буд: муносибати CVS-ро қабул кунед ва онро ба сари он табдил диҳед  ва дар айни замон эътимоднокӣ илова кунед.

Таҳияи ибтидоӣ камтар аз як ҳафта давом кард: таҳия 3 апрели 2005 оғоз ёфт ва то 7 апрел рамзи Git аз ҷониби системаи нотамом идора карда мешуд. 16 июн Linux ба Git интиқол дода шуд ва 25 июл Торвалдс аз вазифаи таҳиягари пешбар истеъфо дод.

Торвалдс дар бораи интихоби номи Гит (ки инглисӣ барои "git" аст) истеҳзо мекард:Шаблон:Цитата2

### Имкониятҳо

Система ҳамчун маҷмӯи барномаҳое тарҳрезӣ шудааст, ки махсус барои истифода дар скриптҳо пешбинӣ шудаанд. Ин ба шумо имкон медиҳад, ки ба осонӣ системаҳои идоракунии версияи Git ё интерфейсҳои корбарро эҷод кунед. Масалан, Cogito маҳз чунин як намунаи печонидани атрофи анбори Git аст ва StGit Git-ро барои идоракунии маҷмӯи часбҳо истифода мебарад.

Git тақсим ва муттаҳидсозии босуръати версияҳоро дастгирӣ мекунад ва асбобҳоро барои визуализатсия ва паймоиши таърихи рушди ғайрихаттӣ дар бар мегирад. Мисли Darcs, BitKeeper, Mercurial, Bazaar ва Monotone[en], Git ба ҳар як нусхаи маҳаллии тамоми таърихи рушд медиҳад, ки тағирот аз як анбори дигар нусхабардорӣ карда мешавад.

Дастрасии дурдаст ба анбори Git аз ҷониби сервери git demon, SSH ё HTTP таъмин карда мешавад. Хидмати git-daemon TCP ба тақсимоти Git дохил карда шудааст ва дар баробари SSH усули маъмултарин ва боэътимоди дастрасӣ мебошад. Усули дастрасии HTTP, сарфи назар аз як қатор маҳдудиятҳо, дар шабакаҳои идорашаванда хеле маъмул аст, зеро он имкон медиҳад, ки конфигуратсияҳои мавҷудаи филтрҳои шабакавӣ истифода шаванд.

Хусусиятҳои татбиқ
------------------

Git core маҷмӯи утилитаҳои сатри фармон бо параметрҳо мебошад. Ҳама танзимот дар файлҳои конфигуратсияи матнӣ нигоҳ дошта мешаванд. Ин татбиқ Git-ро ба осонӣ ба ҳама гуна платформаҳо интиқол медиҳад ва имкон медиҳад, ки Git ба системаҳои дигар ба осонӣ ворид карда шавад (хусусан, мизоҷони графикии Git бо ҳама гуна интерфейси дилхоҳ эҷод кунед).

Анбори Git як феҳристи системаи файлист, ки дорои файлҳои конфигуратсияи анбор, файлҳои журнал, ки амалиётҳои дар анбор иҷрошударо нигоҳ медоранд, индекс, ки ҷойгиршавии файлҳоро тавсиф мекунад ва анбори дорои файлҳои воқеӣ мебошад. Сохтори нигаҳдории файл сохтори воқеии дарахти файлҳои дар репозиторий нигоҳ дошташударо инъикос намекунад, он ба баланд бардоштани суръати иҷрои амалиётҳо бо анбор нигаронида шудааст. Вақте ки ядро фармони тағиротро коркард мекунад (хоҳ барои тағироти маҳаллӣ ё ҳангоми гирифтани пачка аз гиреҳи дигар), он файлҳои навро дар анбор эҷод мекунад, ки ба ҳолати нави файлҳои тағирёфта мувофиқанд. Муҳим аст, ки ҳеҷ гуна амалиёт мундариҷаи файлҳои дар анбор мавҷудбударо тағир надиҳад.

Бо нобаёнӣ, анбор дар зеркаталог бо номи ".git "дар директорияи решаи нусхаи кории дарахти файл, ки дар анбор нигоҳ дошта мешавад, нигоҳ дошта мешавад. Ҳар як дарахти файли системаро тавассути додани фармон барои сохтани репозиторий аз директорияи решаи ин дарахт (ё муайян кардани директорияи реша дар параметрҳои барнома) ба анбори git табдил додан мумкин аст. Анборро аз гиреҳи дигаре, ки тавассути шабака дастрас аст, ворид кардан мумкин аст. Ҳангоми воридоти анбори нав, нусхаи корӣ ба таври худкор эҷод карда мешавад, ки ба ҳолати охирини анбори воридшуда мувофиқат мекунад (яъне тағирот дар нусхаи кории гиреҳи манбаъ, ки барои он фармон дар ин гиреҳ иҷро нашудааст) нусхабардорӣ шудааст).

Архитектура
-----------

Сатҳи поёнии git он чизест, ки системаи файлии суроғашавандаи мундариҷа номида мешавад. Асбоби сатри фармони git дорои як қатор фармонҳо барои идора кардани ин анбор дар сатҳи паст мебошад. Ин фармонҳо барои кори муқаррарӣ бо git ҳамчун системаи идоракунии версия лозим нестанд, балки барои иҷрои амалиёти мураккаб (таъмири анбори вайроншуда ва ғ.) лозиманд ва инчунин имкон медиҳанд, ки замимаи шахсии худро дар асоси анбори git эҷод кунед.

Барои ҳар як объекти репозиторӣ хэши SHA-1 ҳисоб карда мешавад ва маҳз ҳамин хэш номи файле мешавад, ки ин объектро дар директорияи .git/objects дорад. Барои оптимизатсияи кор бо системаҳои файлие, ки дарахтони директорияҳоро истифода намебаранд, байти якуми хэш номи зеркаталог ва боқимонда номи файли дохили он мегардад, ки шумораи файлҳоро дар як директория кам мекунад (иҷрои кор). омили маҳдудкунанда дар чунин системаҳои файлии кӯҳна).

Ҳама истинодҳо ба объектҳои репозиторий, аз ҷумла истинод ба як объекте, ки дар дохили объекти дигар ҷойгиранд, хэшҳои SHA-1 мебошанд.

Илова бар ин, репозиторий дорои феҳристи refs мебошад, ки ба шумо имкон медиҳад номҳои ба одамон хондашаванда барои баъзе объектҳои Git муқаррар карда шавад. Дар фармонҳои Git, ҳарду намуди истинодҳо - рефератҳои барои инсон хондашаванда ва SHA-1 - комилан ивазшавандаанд.

Дар сенарияи муқаррарии классикӣ, дар анбори git се намуди объектҳо мавҷуданд - файл, дарахт ва "кор кардан" (англ. commit - тасдиқ кардан). Файл ин як версияи баъзе файли корбар аст, дарахт маҷмӯи файлҳо аз зеркаталогҳои гуногун, "комитсия" дарахт ва баъзе маълумоти иловагӣ (масалан, супоришҳои волидайн, инчунин шарҳ).

Анбор баъзан ҷамъоварии партовҳоро иҷро мекунад, ки дар давоми он файлҳои кӯҳна бо "deltas "дар байни онҳо ва файлҳои ҷорӣ иваз карда мешаванд (яъне версияи ҷории файл ба таври афзоянда нигоҳ дошта мешавад, афзоишҳо танҳо барои баргаштан ба версияҳои қаблӣ истифода мешаванд), пас аз он маълумоти "delta" ба як файли калоне, ки ба он индекс сохта шудааст, илова карда мешавад. Ин талаботи иқтидори нигоҳдории онро коҳиш медиҳад.

Анбори Git метавонад маҳаллӣ ё дурдаст бошад. Анбори маҳаллӣ зердиректорияи .git мебошад, ки (дар шакли холӣ) аз ҷониби фармони git init ва (дар шакли ғайри холӣ бо мундариҷаи анбори дурдасти волидайн фавран нусхабардорӣ карда мешавад ва истинод ба волидайн) аз ҷониби git фармони клон .

Қариб ҳамаи амалиётҳои маъмулии идоракунии версияҳо, ба монанди ӯҳдадорӣ ва якҷоякунӣ, танҳо дар анбори маҳаллӣ иҷро карда мешаванд. Анбори дурдастро танҳо бо як амбори маҳаллӣ ҳам "боло" ( push ) ва "поён" ( pull ) ҳамоҳанг кардан мумкин аст.

Доштани тамоми анбори лоиҳа ба таври маҳаллӣ барои ҳар як таҳиягар ба Git як қатор бартариҳоро нисбат ба SVN медиҳад. Масалан, ҳама амалиётҳо ба истиснои тела ва кашидан метавонанд бидуни пайвасти интернет иҷро шаванд.

Хусусияти хеле пурқуввати git шохаҳое мебошанд, ки нисбат ба SVN хеле пурратар амалӣ карда мешаванд: аслан, шохаи git ҷуз як истиноди номбаршуда, ки ба супориши муайян дар анбор ишора мекунад (бо истифода аз зеркаталоги refs ) чизи дигаре нест. Уҳдадорӣ бидуни эҷоди шохаи нав танҳо ин пайвандро ба худ интиқол медиҳад ва ӯҳдадорӣ бо таъсиси филиал пайванди кӯҳнаро дар ҷои худ мегузорад, аммо барои ӯҳдадории нав як нав эҷод мекунад ва онро ҷорӣ эълон мекунад. Иваз кардани файлҳои рушди маҳаллӣ бо маҷмӯи файлҳои филиали дигар ва ба ин васила гузаштан ба кор бо он, ҳамон қадар ночиз аст.

Зеррепозиторийҳо инчунин бо ҳамоҳангсозии филиалҳои ҷорӣ дар онҳо дастгирӣ карда мешаванд.

Фармони push ҳамаи маълумоти навро (онҳое, ки ҳанӯз дар анбори дурдаст нестанд) аз анбори маҳаллӣ ба анбори дурдаст интиқол медиҳад. Барои иҷрои ин фармон, зарур аст, ки анбори дурдаст ӯҳдадориҳои нави муштариёни дигар надошта бошад, вагарна тела ноком мешавад ва шумо бояд кашидан ва муттаҳид кунед.

Фармони кашидан муқобили фармони пахш аст. Агар ҳамон як филиал дар нусхаҳои маҳаллӣ ва дурдаст таърихи мустақил дошта бошад, дарҳол кашолакунӣ барои муттаҳидшавӣ идома дорад.

Якҷоякунӣ дар дохили файлҳои гуногун ба таври худкор анҷом дода мешавад (ҳамаи ин рафтор танзимшаванда аст) ва дар дохили як файл - бо муқоисаи стандартии се панели файлҳо. Пас аз якҷояшавӣ, шумо бояд ихтилофҳоро ҳамчун ҳалшуда эълон кунед.

Натиҷаи ҳамаи ин ҳолати нав дар файлҳои маҳаллии таҳиягаре мебошад, ки якҷоякуниро анҷом додааст. Ба ӯ лозим аст, ки фавран ӯҳдадор шавад ва ин объекти ӯҳдадорӣ дар анбор маълумотро дар бар мегирад, ки ӯҳдадорӣ натиҷаи якҷоя кардани ду шоха аст ва ду ӯҳдадориҳои волидайн дорад.

Илова ба якҷояшавӣ, Git инчунин амалиёти интиқолро дастгирӣ мекунад (англ. rebase ). Ин амалиёт гирифтани маҷмӯи ҳама тағирот дар шохаи А мебошад, ки пас аз он ба шохаи В "меғелонад". Дар натиҷа, филиали В ба давлати AB пешбарӣ карда мешавад. Баръакси муттаҳидшавӣ, таърихи филиали AB ягон супоришҳои фосилавии шохаи Аро дар бар намегирад (танҳо таърихи шохаи В ва сабти худи бозсозӣ, ин ҳамгироии лоиҳаҳои калон ва хеле калонро осон мекунад).

Git инчунин дорои индекси муваққатии файлҳои маҳаллӣ мебошад. Ин нигаҳдории фосилавӣ байни файлҳои воқеӣ ва ӯҳдадориҳои навбатӣ мебошад (фармоиш танҳо аз ин индекс анҷом дода мешавад). Бо истифода аз ин индекс, файлҳои нав илова карда мешаванд ( git add онҳоро ба индекс илова мекунад, онҳо ба ӯҳдадории навбатӣ дохил карда мешаванд), инчунин на ҳама файлҳои тағирёфта содир карда мешаванд (уҳдадорӣ танҳо ба он файлҳое, ки git илова карда шудаанд) иҷро карда мешаванд.. Пас аз git add, шумо метавонед файлро минбаъд таҳрир кунед, шумо се нусхаи ҳамон файлро хоҳед гирифт - нусхаи охирин, дар индекс (оне, ки дар вақти git add буд) ва дар супоридани охирин.

Номи филиали пешфарз master аст. Номи пешфарзии анбори дурдаст, ки аз ҷониби git clone ҳангоми амалиёти маъмулии "барои лоиҳаи мавҷуда аз сервер ба мошини худ" сохта шудааст, Origin аст.

Ҳамин тариқ, дар анбори маҳаллӣ ҳамеша як шохаи асосӣ мавҷуд аст, ки охирин ӯҳдадориҳои маҳаллӣ ва шохаи ибтидоӣ/мастер, ки ҳолати охирини анбори дурдаст дар лаҳзаи анҷом додани фармони охирини кашидан ё пахшкунӣ мебошад.

Фармони fetch (qisman pull ) тамоми тағиротҳоро ба Origin/Master аз сервери дурдаст мегирад ва онҳоро ба анбори маҳаллӣ аз нав сабт мекунад ва нишони ибтидоӣ/мастерро пешбарӣ мекунад.

Агар пас аз ин устод ва ибтидо/мастер аз ҳам ҷудо шаванд, пас шумо бояд якҷоя карда, устодро ба натиҷаи якҷоякунӣ муқаррар кунед (фармони кашидан fetch+merge аст). Пас аз он имконпазир аст, ки тавассути фиристодани натиҷаи якҷоякунӣ ба сервер ва танзими ибтидоӣ/мастер ба он фишор овардан мумкин аст.

Тафсилоти татбиқ дар Windows
----------------------------

Версияи Windows (версияи расмии Windows mSysGit номида мешавад) бастаи mSys, порти сатри фармони POSIX- ро барои Windows аз лоиҳаи MinGW истифода мебарад. Ҳама китобхонаҳо ва абзорҳое, ки барои Git заруранд, инчунин худи Git ба mSys интиқол дода шудаанд. Ҳангоми кор бо анборҳои дурдаст тавассути SSL, мағозаи сертификат аз mSys истифода мешавад, на аз Windows.

Якчанд фронтҳои Git барои Windows мавҷуданд, ба монанди TortoiseGit. Ҳамаи онҳо тавассути зангҳо ба mSysGit амалӣ карда мешаванд ва талаб мекунанд, ки он дар мошин насб карда шавад. SourceTree, ҳалли Atlassian, истисно нест, аммо он дар дохили худ mSysGit-ро дар бар мегирад, ки мусбат ва манфии худро дорад (масалан, насб дар зеркаталоги амиқ илова кардани сертификатҳои SSL-ро ба mSys душвор месозад).

Азбаски Windows нисбат ба аксари системаҳои ба Unix монанд аломати охири сатри дигарро истифода мебарад, барои дастаҳое, ки системаҳои оператсионии гуногунро идора мекунанд, вариантҳо мавҷуданд (ҳам дар сатҳи мизоҷ ва ҳам дар сатҳи репозиторий), ки намоиши доимии охири сатрро таъмин мекунанд.

Имкониятҳои шабакавӣ ва ҳалли сервер
------------------------------------

Git шабакаро танҳо барои мубодилаи амалиёт бо анборҳои дурдаст истифода мебарад.

Протоколҳои зерин метавонанд истифода шаванд:

* git protocol (URI scheme - git: ) - протоколи кушода , ки демони git-ро дар сервер талаб мекунад  (бо Git дода мешавад), протокол асбобҳои аутентификатсияи корбарро надорад;
* SSH ( ssh: ) - аутентификатсияи корбарро бо истифода аз ҷуфтҳои калидӣ, инчунин сервери "асосии" SSH (sshd), ки дар системаи Unix сохта шудааст, истифода мебарад, дар тарафи сервер эҷоди ҳисобҳоро бо git ҳамчун қабати қабеҳ талаб мекунад;
* HTTP ва HTTPS ( http:, https:) - асбоби curl (барои Windows - бо git меояд) ва қобилиятҳои аутентификатсияи HTTP, инчунин дастгирии SSL ва сертификатҳоро истифода мебарад.

Дар ҳолати охирин, кор дар тарафи сервери веб-барнома лозим аст, ки ҳамчун қабат байни фармонҳои Git дар сервер ва сервери HTTP амал мекунад (дар байни онҳо WebGitNet аст, ки дар ASP.NET MVC 4 таҳия шудааст). Илова ба дастгирии фармонҳои пахш ва кашидан аз ҷониби сервер, чунин барномаҳои веб инчунин метавонанд дастрасии танҳо барои хондан ба анборро тавассути браузери веб таъмин кунанд.

Интерфейсҳои графикӣ
--------------------

Барои система бисёр интерфейсҳои графикӣ таҳия шудаанд, ки дар байни онҳо - GitKraken (мизоҷи муштараки Git кросс-платформа), SmartGit (интерфейси кросс-платформа дар Java ), gitk (барномаи содда ва зуд дар Tcl / Tk навишта шудааст, ки бо Худи Git), Giggle (имконият барои Gtk+ ), TortoiseGit (интерфейсе, ки ҳамчун васеъ барои Windows Explorer амалӣ карда мешавад), SourceTree (муштарии Git барои Windows ва Mac), муштарии Github ва як қатор дигарон.

Илова бар ин, бисёр веб-фронтҳо таҳия шудаанд, аз ҷумла GitWebAdmin, GitLab, Gitblit, Gerrit, Gitweb, Kallithea, Gitea .

Хостинги Git
------------

Як қатор хидматҳо хостингро барои анбори git таъмин мекунанд, аз ҷумла GitHub, Codebase, SourceForge, SourceHut, Gitea, Bitbucket, GitLab .

Мубориза бо дигар системаҳои идоракунии версия
----------------------------------------------

Бастаи стандартии Git ҳамкорӣ бо CVS (воридот ва содирот, эмуляцияи сервери CVS) ва Subversion (қисман дастгирии воридот ва содирот) -ро дастгирӣ мекунад. Воситаи стандартии воридот ва содирот дар дохили экосистема бойгонии як қатор файлҳои версиявӣ дар форматҳои .tar.gz ва .tar.bz2 мебошад.

Қайдҳо
------

1. ↑
2. ↑  The git Open Source Project on Open Hub: Languages Page — 2006.
3. ↑  Re: Trivia: When did git self-host?
4. ↑  *Hamano J. C.* [ANNOUNCE Git v2.43.0] — 2023.
5. 1 2 3 4 5 6  Git pack format
6. ↑  Copying (ингл.)
7. ↑  git(пайванди дастнорас — *таърих*). 19 июни 2009 санҷида шуд. Баргирифта аз сарчашмаи аввал 14 апрели 2010.
8. ↑  BitKeeper and Linux: The end of the road?(пайванди дастнорас — *таърих*). 7 ноябри 2017 санҷида шуд. Баргирифта аз сарчашмаи аввал 8 июни 2017.
9. ↑  Выступление Торвальдса(пайванди дастнорас — *таърих*). 28 сентябри 2017 санҷида шуд. Баргирифта аз сарчашмаи аввал 28 май 2007.
10. ↑  Git — Transfer Protocols(пайванди дастнорас — *таърих*). 28 октябри 2013 санҷида шуд. Баргирифта аз сарчашмаи аввал 29 октябри 2013.
11. ↑  Git на сервере — Git-демон(пайванди дастнорас — *таърих*). 9 май 2022 санҷида шуд. Баргирифта аз сарчашмаи аввал 20 апрели 2017.

Адабиёт
-------

* *Чакон С. Штрауб Б.* Git для профессионального программиста. — Питер, 2017. — 496 с. — ISBN 978-5-496-01763-3.

Пайвандҳо
---------

##### Дарсҳо

* Интерактив Git Чӣ тавр сайру гашт(рус.)
* Дарси Pro Git бо забони русӣ (CC BY-NC-SA 3.0).

##### Сайтҳои расмӣ

* Саҳифаи хонагии Git(англ.)
* Саҳифаи Git дар kernel.org(англ.)

##### Мусоҳиба

* Линус Торвалдс дар git(рус.) (YouTube)
* Даҳ соли Гит: Мусоҳиба бо Офаридгор - Линус Торвалдс(англ.)
* Линус Торвалдс дар Git(англ.) - Ҳикояи Линус Торвалдс дар бораи git ва дигар системаҳои идоракунии версия (YouTube)
* Рандал Шварц дар Git(англ.) - Ҳикояи Рандел Швартс дар бораи Гит (YouTube)
* Саҳм бо Git(англ.) - Google Talks 27.10.2008 (YouTube)