__БЕЗКН__

-{Git}- () је систем контроле верзија за праћење промена у рачунарским фајловима и за координисан рад више људи на тим фајловима. Примарно се користи за верзионисање кода при развоју софтвера, али се може користити за праћење промена у било којим фајловима. То је дистрибуирани систем контроле верзија чија је главна предност брзина, "So I'm writing some scripts to try to track things a whole lot faster." интегритет података, и подршка за дистрибуиране, нелинеарне послове.

Гит је развио Линус Торвалдс, 2005. године за потребе развоја Линукс језгра, уз допринос и других програмера језгра његовом првобитном развоју. Његов тренутни развијач, од 2005. године је Јунио Хамано.

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

Гит је слободан софтвер дистрибуиран под условима ГНУ-ове опште јавне лиценце верзије 2.

Историја Развој Гит-а је почео у априлу 2005. године, након што је много програмера Линукса препустило приступ БитКипер-у, власничком систему за изворну контролу управљања () који се раније користио за одржавање пројекта. Носилац ауторских права над БитКипер-ом, Лари МекВој, је повукао бесплатно коришћење производа, тврдећи да је Ендру Тридгел имао обрнуто-пројектоване протоколе за БитКипер.

Линус Торвалдс је хтео дистрибуирани систем који би могао користити као БитКипер, али ниједан од доступних слободних система није задовољавао његове потребе, посебно у смислу перформанси. Торвалдс је узео за пример систем за изворну контролу управљања коме је требало тридесет секунди да примени закрпу и ажурира све повезане метаподатке, и напоменуо да то не би одговарало потребама развоја Линукс језгра, где ће синхронизација са осталим извршавањима захтевати 250 таквих акција у тренутку. Хтео је да крпљење траје три секунде, и имао је неколико других критеријума у виду: узмимо систем конкурентног верзионисања () као пример шта не треба радити; ако сте у недоумици, донесите супротну одлуку подржава дистрибуирани процес рада, налик БитКипер-овом веома јаке гаранције против корупције, било случајне или злонамерне.

Ова три критеријума су елиминисала све системе за контролисање верзија који су постојали у том периоду, осим Монотон-а. Разматрање перформанси је искључило и ову верзију. Одмах након објаве 2.6.12-рц2 развојне верзије Линукс језгра, Торвалдс је одлучио да напише свој систем.

Торвалдс се нашалио око назива git, који у сленгу Британског Енглеског значи "непријатно лице". Торвалдс је рекао: "Ја сам егоистично копиле, и назваћу све моје пројекте по себи. Први је био 'Линукс', а сада 'гит'.""GitFaq: Why the 'git' name?""After controversy, Torvalds begins work on 'git'" . У упутству се Гит описује као "глупи трагач садржаја"."git(1) Manual Page".  У "readme" фајлу изворног кода се још више говори о томе:"Initial revision of "git", the information manager from hell · git/git@e83c516".

Назив "гит" је дао Линус Торвалдс када је написао прву верзију. Он је описао овај алат као "глупи прикупљач садржаја" а назив као (у зависности од расположења): насумучну комбинацију три слова која може да се изговори, а није заправо искоришћена за неку Јуникс команду. Чињеница да је то погрешно изговорена реч "get" није релевантна. глупо, одвратно и презирно. једноставно. Изабери било коју реч из речника сленга. "глобални прикупљач информација": расположени сте, и он заправо ради за вас. Анђеоски глас и светло, одједном испуњавају просторију "g*dd*mn idiotic truckload of sh*t": када се поквари

Развој Гит-а је почео 3. априла 2005. године. Пројекат је објављен 6. априла, и постао селф-хостинг од 7. априла. Прво спајање више грана је учињено 18. априла. Торвалдс је постигао своје циљеве; 29. априла, новонастали Гит је био упоређиван са снимљеним закрпама Линукс језгра три по стопи од 6,7 секунди. Дана 16. јуна Гит је достигао издање 2.6.12 језгра.

Торвалдс је предао одржавање Гит-а 26. јула 2005. Јуниу Хаману, главном сараднику на пројекту. Хамано је био одговоран за пуштање верзије 1.0, 21. децембра 2005. године, и остао је главни одржавалац пројекта.

Верзија Првобитни датум објаве Последња верзија Датум објаве0.99 2005-07-11 0.99.9n 2005-12-151.0 2005-12-21 1.0.13 2006-01-271.1 2006-01-08 1.1.6 2006-01-301.2 2006-02-12 1.2.6 2006-04-081.3 2006-04-18 1.3.3 2006-05-161.4 2006-06-10 1.4.4.5 2008-07-161.5 2007-02-14 1.5.6.6 2008-12-171.6 2008-08-17 1.6.6.3 2010-12-151.7 2010-02-13 1.7.12.4 2012-10-171.8 2012-10-21 1.8.5.6 2014-12-171.9 2014-02-14 1.9.5 2014-12-172.0 2014-05-28 2.0.5 2014-12-172.1 2014-08-16 2.1.4 2014-12-172.2 2014-11-26 2.2.3 2015-09-042.3 2015-02-05 2.3.10 2015-09-292.4 2015-04-30 2.4.10 2015-09-292.5 2015-07-27 2.5.4 2015-09-292.6 2015-09-28 2.6.5 2016-01-042.7 2015-10-04 2.7.3 2015-10-302.8 2016-03-28 2.8.4 2016-06-062.9 2016-06-13 2.9.3 2016-08-122.10 2016-09-02 2.10.2 2016-10-282.11 2016-11-29 2.11.1 2017-02-022.12 2017-02-24 2.12.0 2017-02-24

Дизајн Гит-ов дизајн је инспирисан БитКипер-ом и Монотон-ом.Torvalds, Linus (2006-05-05). Torvalds, Linus (2005-04-08). Гит је првобитно замишљен као машина ниског нивоа система контроле верзија који су други могли написати као предњи крај, као што је Когито или СтГИТ. Језгро Гит пројекта је од тада постало комплетан систем контроле верзија који се употребљивао директно.Torvalds, Linus (2006-03-23). Иако је био под снажним утицајем БитКипер-а, Торвалдс је намерно избегавао уобичајене приступе, што је довело до јединственог дизајна.Torvalds, Linus (2006-10-20).

Карактеристике Гит-ов дизајн је синтеза Торвалдсовог искуства са Линуксом у одржавању великих дистрибуираних развојних пројеката, заједно са својим властитим знањем о перформансама система датотека добијеног из истог пројекта као и хитне потребе да произведе систем који ради, у кратком року. Ови услови су довели до следећих избора за имплементацију:

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

Дистрибуирани развој Као Даркс, БитКипер, Меркуријал, СВК, Базар и Монотон, Гит даје сваком програмеру локалну копију целокупне историје развоја, а промене се копирају из једног репозиторијума у друго. Ове промене се увозе као додатне развојне гране, и могу се и спојити на исти начин као и локално развијене гране.

Компатибилност са постојећим системима/протоколима Репозиторијуми се могу објавити преко HTTP-а, ФТП-а, rsync-а, или Гит протокола преко било којег сокета, или ssh. Гит такође има CVS сервер емулацију, која омогућава коришћење постојећих CVS клијената и IDE додатака за приступ Гит-овим репозиторијумима. Субверзија и SVK репозиторијуми се могу користити директно са git-svn-ом.

Ефикасно руковођење великим пројектима Торвалдс је описао Гит као веома брз и прилагодљив,Torvalds, Linus (2006-10-19). а Мозилини тестови перформанси суJst's Blog on Mozillazine "bzr/hg/git performance". показали да је за ред величине бржи од неких система za контролу верзија, а преузимање верзије историје из локалног репозиторијума може бити и до сто пута брже од преузимања са удаљеног сервера.Dreier, Roland (2006-11-13). Криптографска провера идентитета историје Историја Гит-а се чува на такав начин да идентификација посебне верзије (комит на језику Гит-а) зависи од комплетне историје развоја која је довела до тог комита. Од тренутка када је верзија објављена, више је није могуће мењати неприметно. Структура је слична Меркеловом стаблу, али са додатним подацима на чворовима и листовима."Trust". (Меркуријал и Монотон такође имају овакво својство.)

Дизајн базиран на алатима Гит је осмишљен као скуп програма писаних у Ц-у, као и скуп скрипти које представљају допуну тих програма.Torvalds, Linus.  Иако је већина тих скрипти написана у C-у због брзине и преносивости, дизајн је остао исти, а и лако је било повезати компоненте заједно.iabervon (2005-12-22).

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

Смеће се нагомилава уколико није сакупљено Прекидање операција или опозивање промена ће оставити велики број бескорисних објеката у бази података. То су углавном мали делићи историје објеката који су у сталном порасту. Гит ће аутоматски обављати сакупљање смећа када се непотребни предмети прикупе у репозиторијуму. Смеће се може експлицитно позвати коришћењем git gc --prune."Git User's Manual". 2007-08-05.

Периодично експлицитно слагање објеката Гит чува сваки новонастали објекат као посебан фајл. Иако је појединачно компресован, он заузима много поростора и врло је неефикасан. Овај проблем је решен стварањем пакета који складиште велики број објеката у једној датотеци (или проток мрежних бајтова) по имену packfile, који је делта-компресован. Пакети су компресовани коришћењем хеуристике по којој су фајлови са истим именом вероватно слични. Одговарајући индекс фајл се креира за сваки packfile, и обележава сваки објекат у њему. Нови објекти (новостворена историја) се и даље чувају појединачно, и периодично препакивање је неопходно ради одржавања ефикасности простора. Процес паковања репозиторијума може бити веома скуп. Дозволом да објекти постоје у репозиторијуму за непотрегне фајлове, али у брзо произведеном формату, Гит омогућава да рад са скупим пакетима буде одложен за касније, када време није битно (нпр. на крају радног дана). Гит врши аутоматско периодично препаковање, али је и за кориснике препакивање могуће уз помоћ команде git gc. Због целости података, и packfile и његов индекс имају SHA-1 контролни збир у себи, а њега такође садржи и име датотеке. Да бисте проверили интегритет, покрените команду git fsck.

Још једна особина Гит-а је да је снима гранање директоријума фајлова. Најранији системи за контролу изворног кода () и системи за контролу ревизија (), радили су на појединачним фајловима и омогућавали уштеду простора стеченог од прошараних делти (SCCS) или делта кодирања (RCS) (углавном сличних) верзија. Каснија ревизија контролних система довела је до тога да је фајл имао идентитет кроз више ревизија пројекта. Међутим, Торвалдс је одбацио овај концепт.Torvalds, Linus (2005-04-10). Сходно томе, Гит не снима експлицитно ревизије односа на било ком нивоу испод гране изворног кода.

Односи имплицитних ревизија имају неке значајне последице: Знатно је скупље извршити промену целе историје једног фајла него цео један пројекат.Haible, Bruno (2007-02-11). "how to speed up "git log"?". git (Mailing list). Да би добили историју промена које утичу на дату датотеку, Гит мора да прође кроз глобалну историју, а онда и да утврди да ли свака промена модификује тај фајл. Овај метод прегледа историје, међутим, даје Гит-у могућност да производи са једнаком ефикасношћу једну историју која приказује промене на произвољан скуп датотека. На пример, поддиректоријум изворног стабла плус повезано глобално заглавље датотеке је врло чест случај.