Пређи на садржај

Git

С Википедије, слободне енциклопедије
Git
Оригинални аутор(и)Линус Торвалдс[1]
Програмер(и)Јунио Хаманои други[2]
Прво издање7. април 2005.;пре 19 година(2005-04-07)
Стабилно издање
2.44.0 / 23. фебруар 2024.;пре 7 месеци(2024-02-23)
РепозиторијумУреди на Википодацима
Написан у
Оперативни систем
Платформа
Доступан наенглески
ТипСистем контроле верзија
ЛиценцаGNUGPLv2[3]иGNUGPLv2.1[4]
Веб-сајтgit-scm

Git(транскр.гит) јесистем контроле верзијаза праћење промена у рачунарским фајловима и за координисан рад више људи на тим фајловима. Примарно се користи за верзионисање кода при развоју софтвера,[5]али се може користити за праћење промена у било којим фајловима. То једистрибуирани систем контроле верзијачија је главна предност брзина,[6]интегритет података,[7]и подршка за дистрибуиране, нелинеарне послове.[8]

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

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

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

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

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

  • узмимосистем конкурентног верзионисања(енгл.Concurrent Versions System - CVS) као пример шта не треба радити; ако сте у недоумици, донесите супротну одлуку[8]
  • подржава дистрибуирани процес рада, налик БитКипер-овом[8]
  • веома јаке гаранције против корупције, било случајне или злонамерне.[7]

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

Торвалдс се нашалио око називаgit,који у сленгуБританског Енглескогзначи "непријатно лице". Торвалдс је рекао: "Ја сам егоистично копиле, и назваћу све моје пројекте по себи. Први је био 'Линукс', а сада 'гит'. "[13][14]Уупутствусе Гит описује као "глупи трагач садржаја".[15]У "readme" фајлу изворног кода се још више говори о томе:[16]


Назив "гит" је дао Линус Торвалдс када је написао прву верзију. Он је описао овај алат као "глупи прикупљач садржаја" а назив као (у зависности од расположења):

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

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

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

Верзија Првобитни датум објаве Последња верзија Датум објаве
0.99 2005-07-11 0.99.9n 2005-12-15
1.0 2005-12-21 1.0.13 2006-01-27
1.1 2006-01-08 1.1.6 2006-01-30
1.2 2006-02-12 1.2.6 2006-04-08
1.3 2006-04-18 1.3.3 2006-05-16
1.4 2006-06-10 1.4.4.5 2008-07-16
1.5 2007-02-14 1.5.6.6 2008-12-17
1.6 2008-08-17 1.6.6.3 2010-12-15
1.7 2010-02-13 1.7.12.4 2012-10-17
1.8 2012-10-21 1.8.5.6 2014-12-17
1.9 2014-02-14 1.9.5 2014-12-17
2.0 2014-05-28 2.0.5 2014-12-17
2.1 2014-08-16 2.1.4 2014-12-17
2.2 2014-11-26 2.2.3 2015-09-04
2.3 2015-02-05 2.3.10 2015-09-29
2.4 2015-04-30 2.4.10 2015-09-29
2.5 2015-07-27 2.5.4 2015-09-29
2.6 2015-09-28 2.6.5 2016-01-04
2.7 2015-10-04 2.7.3 2015-10-30
2.8 2016-03-28 2.8.4 2016-06-06
2.9 2016-06-13 2.9.3 2016-08-12
2.10 2016-09-02 2.10.2 2016-10-28
2.11 2016-11-29 2.11.1 2017-02-02
2.12 2017-02-24 2.12.0 2017-02-24

Гит-ов дизајн је инспирисанБитКипер-ом иМонотон-ом.[24][25]Гит је првобитно замишљен као машина ниског нивоа система контроле верзија који су други могли написати као предњи крај, као што јеКогитоилиСтГИТ.[25]Језгро Гит пројекта је од тада постало комплетан систем контроле верзија који се употребљивао директно.[26]Иако је био под снажним утицајем БитКипер-а, Торвалдс је намерно избегавао уобичајене приступе, што је довело до јединственог дизајна.[27]

Карактеристике

[уреди|уреди извор]

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

Јака подршка за нелинеарни развој
Гит подржава брзо гранање и спајање, и укључује посебне алате за визуализацију и усмеравање историје нелинеарних развоја. Главна претпоставка у Гит-у је та да ће промена бити много чешће спајана него што је написано, јер је прошао кроз прсте разних критичара. У Гиту су грана веома једноставне: грана је само референца ка једномкомит-у. Са својим надређеним комитом, цела структура гране се може креирати.
Дистрибуирани развој
КаоДаркс,БитКипер,Меркуријал,СВК,БазариМонотон,Гит даје сваком програмеру локалну копију целокупне историје развоја, а промене се копирају из једног репозиторијума у друго. Ове промене се увозе као додатне развојне гране, и могу се и спојити на исти начин као и локално развијене гране.
Компатибилност са постојећим системима/протоколима
Репозиторијуми се могу објавити прекоHTTP-а,ФТП-а,rsync-а, или Гит протокола преко било којегсокета,илиssh.Гит такође имаCVSсервер емулацију, која омогућава коришћење постојећихCVSклијената иIDEдодатака за приступ Гит-овим репозиторијумима.СубверзијаиSVKрепозиторијуми се могу користити директно саgit-svn-ом.
Ефикасно руковођење великим пројектима
Торвалдс је описао Гит као веома брз и прилагодљив,[28]а Мозилини тестови перформанси су[29]показали да је заред величинебржи од неких система za контролу верзија, а преузимање верзије историје из локалног репозиторијума може бити и до сто пута брже од преузимања са удаљеног сервера.[30]
Криптографска провера идентитета историје
Историја Гит-а се чува на такав начин да идентификација посебне верзије (комит на језику Гит-а) зависи од комплетне историје развоја која је довела до тог комита. Од тренутка када је верзија објављена, више је није могуће мењати неприметно. Структура је сличнаМеркеловом стаблу,али са додатним подацима на чворовима и листовима.[31](МеркуријалиМонотонтакође имају овакво својство.)
Дизајн базиран на алатима
Гит је осмишљен као скуп програма писаних уЦ-у, као и скуп скрипти које представљају допуну тих програма.[32]Иако је већина тих скрипти написана у C-у због брзине и преносивости, дизајн је остао исти, а и лако је било повезати компоненте заједно.[33]
Стратегије прикључног спајања
Као део свог дизајна налик алату, Гит има добро дефинисан модел недовршеног спајања, и има већи број алгоритама који могу да потпомогну у том сегменту, што је кулминирало тиме да је саопштавао кориснику да није у стању да аутоматски комплетира спајање и да је потребно ручно изменити.
Смеће се нагомилава уколико није сакупљено
Прекидање операција или опозивање промена ће оставити велики број бескорисних објеката у бази података. То су углавном мали делићи историје објеката који су у сталном порасту. Гит ће аутоматски обављатисакупљање смећакада се непотребни предмети прикупе у репозиторијуму. Смеће се може експлицитно позвати коришћењемgit gc --prune.[34]
Периодично експлицитно слагање објеката
Гит чува сваки новонастали објекат као посебан фајл. Иако је појединачно компресован, он заузима много поростора и врло је неефикасан. Овај проблем је решен стварањем пакета који складиште велики број објеката у једној датотеци (или проток мрежних бајтова) по именуpackfile,који једелта-компресован.Пакети су компресовани коришћењемхеуристикепо којој су фајлови са истим именом вероватно слични. Одговарајући индекс фајл се креира за свакиpackfile,и обележава сваки објекат у њему. Нови објекти (новостворена историја) се и даље чувају појединачно, и периодично препакивање је неопходно ради одржавања ефикасности простора. Процес паковања репозиторијума може бити веома скуп. Дозволом да објекти постоје у репозиторијуму за непотрегне фајлове, али у брзо произведеном формату, Гит омогућава да рад са скупим пакетима буде одложен за касније, када време није битно (нпр. на крају радног дана). Гит врши аутоматско периодично препаковање, али је и за кориснике препакивање могуће уз помоћ командеgit gc.Због целости података, иpackfileи његов индекс имајуSHA-1контролни збир у себи, а њега такође садржи и име датотеке. Да бисте проверили интегритет, покрените командуgit fsck.

Још једна особина Гит-а је да је снима гранање директоријума фајлова. Најранијисистеми за контролу изворног кода(енгл.Source Code Control System - SCCS) исистеми за контролу ревизија(енгл.Revision Control System - RCS), радили су на појединачним фајловима и омогућавали уштеду простора стеченог одпрошараних делти(SCCS) илиделта кодирања(RCS) (углавном сличних) верзија. Каснија ревизија контролних система довела је до тога да је фајл имао идентитет кроз више ревизија пројекта. Међутим, Торвалдс је одбацио овај концепт.[35]Сходно томе, Гит не снима експлицитно ревизије односа на било ком нивоу испод гране изворног кода.

Односи имплицитних ревизија имају неке значајне последице:

  • Знатно је скупље извршити промену целе историје једног фајла него цео један пројекат.[36]Да би добили историју промена које утичу на дату датотеку, Гит мора да прође кроз глобалну историју, а онда и да утврди да ли свака промена модификује тај фајл. Овај метод прегледа историје, међутим, даје Гит-у могућност да производи са једнаком ефикасношћу једну историју која приказује промене на произвољан скуп датотека. На пример, поддиректоријум изворног стабла плус повезано глобално заглавље датотеке је врло чест случај.
  • Преименовање се чешће врши имплицитно него експлицитно. Заједнички приговорCVS-а је да он користи назив датотеке како би идентификовао своју историју ревизија, па премештање или преименовање фајла није могуће без прекидања своје историје, или преименовања историје што би направило историју нетачном. Већина система контроле ревизија послеCVS-а решава овај ппоблем давањем јединственог имена датотеци (аналогно и-нод броју) на кога не утиче преименовање. Гит не подржава такав идентификатор, а за то се тврди да је предност.[37][38]Фајловиизворног кодасу понекад раштркани, спојени или просто преименовани,[39]па би њихово представљање као једноставна преименовања, замрзнуло нетачан опис онога што се догодило у (непроменљивој) историји. Гит чешће препознаје грешке детектовањем промене имена приликом претраживања историје снимака него снимањем исте када прави снимак.[40](Укратко, ако је фајл у некојNревизији, фајлови са истим именом у ревизијиN-1представљају његове подразумеване претке. Међутим, када не постоји као назив датотеке у ревизијиN-1,Гит тражи фајл који је постојао само у ревизијиN-1и који је веома сличан новом фајлу.) Међутим, то захтева знатно интензивнији радпроцесорасваки пут кад се прегледа историја и неколико опција како би се подесила хеуристика. Овај механизам не функционише увек; понекад, фајл који је преименован са променама, у истом комиту се чита као брисање старе датотеке и води ка стварању новог фајла. Програмери могу да раде око овог ограничења комитовањем преименовања и измена одвојено.

Гит подржава неколико стратегија спајања; неподразумева се може изабрати у тренутку спајања:[41]

  • resolve:традиционални алгоритам спајања на три начина
  • recursive:ово је подразумевана опција приликом повлачења или спајања једне гране и то је варијанта алгоритма спајања на три начина.

    Када постоји више од једног заједничког претка који могу да се користе за спајање на три начина, оно креира спојено стабло заједничких предака и то користи као референтно стабло за спајање на три начина. Као резултат овога, пријављено је много мање конфликта при спајању, без настанка међуспајања у урађеним тестовима на спојеним комитима, у историји развоја Линукс 2.6 језгра. Такође, ово може да открије и рукује спајањима које укључују преименовања.

  • octopus:ово је подразумевана опција приликом спајања две или више глава.

Структуре података

[уреди|уреди извор]

Гит-ове примитиве нису инхерентносистем за изворну контролу управљања.Торвалдс објашњава,[35]

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

Од овог иницијалног дизајна, Гит је развио комплетан сет функција које се очекују од традиционалногсистема за изворну контролу управљања,[26]са функцијама углавном створених по потреби, уместо уређиваних и прошириваних током времена.

Неки токови података и нивои складиштења у систему контроле Гит верзија.

Гит има двеструктуре података:променљив индекс (који се још назива и фаза или кеш) који кешира информације о радном директоријуму и комитовању наредне ревизије; и непроменљив, у коме се само додају објекти у базу података.

Индекс служи као веза између објекта базе података и радног стабла.

Објекат базе података садржи четири врсте објеката:

  • БЛОБ(бинарни велики објекат) је садржајдатотеке.БЛОБ-ови немају име датотеке, временске ознаке, нити друге метаподатке. (Назив блоба интерно је хеш сопственог садржаја.)
  • Стаблообјекат је еквивалент директоријуму. Оно садржи списак имена фајлова, сваки са неким типом бита и име БЛОБ-а или стабла објекта који чине тај фајл, симболички линк или садржај директоријума. Овај објекат описује снимак изворног стабла.
  • Комитобјекат повезује стабло објекат заједно у историју. Он садржи назив стабла објекта (највишег извора у директоријуму), временску ознаку, евиденцију порука и имена нула или више надређених комит објеката.
  • Ознакаобјекат је контејнер који садржи референцу на други објекат и може да прими додатне мета податке који се односе на други предмет. Најчешће се користи за складиштењедигиталних потписаза комит објекте који одговарају одређеним верзијама података који су праћени од стране Гит-а.

Сваки објекат се идентификујеSHA-1хешомњеговог садржаја. Гит израчунава хеш, и користи ову вредност за име објекта. Објекат се ставља у директоријум који се подудара са прва два слова његовог хеша. Остатак хеша се користи као име фајла за тај објекат.

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

Гит сервери се обично слушају наTCPпорту9418.[43]

Референце

[уреди|уреди извор]

Сваки објекат у Гит бази података који се не односи на њега се може очистити помоћу командеgarbage collection,или аутоматски. Објекат може бити референциран од стране другог објекта, или експлицитно референциран. Гит препознаје различите врсте референци. Команде за креирање, премештање и брисање референци варирају. "git show-ref"листа наводи све референце. Неке врсте су:

  • heads:односи се на локални објекат.
  • remotes:односи се на објекат који постоји у удаљеном репозиторијуму.
  • stash:односи се на објекат који још није извршен.
  • meta:на пример. конфигурација у репозиторијуму, корисничка права.refs/meta/configименски простор је увео Герит (софтвер)[44]
  • tags:видети изнад.

Имплементације

[уреди|уреди извор]
gitg је графички корисник GTK+

Гит је првенствено развијен наЛинуксу,иако подржава већину главних оперативних система, укључујућиBSD,Соларис,OS XиMicrosoft Windows.[45]

Први Microsoft Windows"порт"за Гит је, пре свега, Линуксова емулација фрејмворка који хостује Линукс верзију. Инсталирање Гит-а под Windows-ом креира сличанProgram Filesдиректоријум који садржи 5.236 датотека у 580 директоријума. Ово укључујеMinGWпорт ГНУ-ове колекције компајлера,Perl5,msys2.0 (Cygwinфорк, емулациони фрејмворк за Windows налик Јуниксу) и разне друге Windows портове или емулаторе из помоћних библиотека Линукса. Тренутне нативне верзије за Windows се дистрибуирају као 32-битне и 64-битне инсталације.

JGitимплементација Гит-а јеЈавабиблиотека, дизајнирана да буде уграђена у било којој Јава апликацији.JGitсе користи уГериталату за проверу кода иEGit,Гит клијент заЕклипсокружење.[46]

Dulwichимплементација Гит-а је чистаПајтоновасофтверска компонента за Пајтон 2.[47]

libgit2имплементација Гит-а јеANSI Cсофтверска библиотека, која може бити изграђена на више платформи, укључујући Microsoft Windows, Линукс, Мек OS X, и BSD.[48]Везана је за многе програмске језике, укључујућиРуби,ПајтониХаскел.[49][50][51]

JS-GitјеЈаваскриптимплементација која представља подскуп Гит-а.[52]

Гит сервер

[уреди|уреди извор]

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

Даљинско складиштење фајлова и приступ преко љуске
Гит репозиторијум може да се клонира у заједнички систем датотека, а могу му приступати и друге особе. Такође му се може приступити преко даљинске љуске уз инсталацију Гит-овог софтвера који омогућава кориснику да се пријави.[53]
Гит демон, аутоматски-веб
Гит демон(енгл.Git daemon) омогућава корисницима да деле свој репозиторијум колегама. Гит аутоматски-веб омогућава корисницима да обезбеде веб преглед неког репозиторијума. Од априла 2014. године аутоматски-веб не ради на Windows-у. Оба се могу видети у линији Меркуријалове "ХГ услуге".[54][55]
Гитолит
Гитолит(енгл.Gitolite) је облик контроле приступа у оквиру Гит-а, који пружа солидну контролу приступа Гит-овим репозиторијумима. Уз помоћ других софтвера он може да има даљински увид у репозиторијуме на серверу.[56][57]
Апач Алура
Апач Алура(енгл.Apache Allura) је развијени софтвер отвореног кода за управљање репозиторијумима слободног кода, извештавање о баговима, дискусије, вики странице, блогове и више за било које појединачне пројекате.
Герит
Герит(енгл.Gerrit) обезбеђује две од три функционалности: контролу приступа и управљање репозиторијумом. КористиjGit.Увид у репозиторијум је повезан нпр. или саГитолит-ом илиГитблит-ом.
Гитблит
Гитблит(енгл.Gitblit) омогућава све три функције, али се у већим инсталацијама користи као претраживач репозиторијума који је инсталиран заједно саГерит-ом ради контроле приступа и управљања репозиторијумом.[58][59]

Гитблит такође може да обезбеди опцију синхронизације за друге репозиторијуме.

Гитилс
Гитилс(енгл.Gitiles) је једноставан претраживач репозиторијума, који се најчешће користи заједно саГерит-ом.[60][61]
Бонобо Гит сервер
Бонобо Гит Сервер(енгл.Bonobo Git Server) је једноставан Гит сервер за Windows имплементације као што јеАСП.НЕТкапија.[62]Он се ослања на механизме заштите које пружа WindowsИнтернет информациони сервис,тако да не подржаваSSHприступ, али се лако може повезати са активним директоријумом.
Гиториус
Гиториус(енгл.Gitorious) је слободан софтвер иза Гит-овог сервиса за прављење репозиторијума истог имена. У марту 2015, Гиториус је купиоГитЛаб.[63]
ГитЛаб
ГитЛаб(енгл.GitLab) пружа услугесофтверског репозиторијума.Он омогућава интернет интерфејс као што јеГитХаб,а написан је уРуби-ју.
Гогс
Гогс(енгл.Gogs) је још један Гит сервис, написан уГоу.Пружа сличне функцијеГитХаб-у као веб интерфејс.[64]
ГитХaб
ГитХаб(енгл.GitHub) је веб-базиран складишнихостинг сервисна коме можете поставити копију свог Гит репозиторијума. То је Гит-ов сервис за прављење репозиторијума, који нуди све функције дистрибуирану контролу ревизија и менаџмент изворног кода, додајући своје карактеристике. За разлику од Гит-а, који је стриктно алат који се користи из командне линије, ГитХаб пружавеб-базиран графички интерфејс,радну површину и мобилну интеграцију. Такође пружаконтролу приступаи неколико функција за сарадњу, као што су праћење грешака (енгл.bug tracking), захтеве за додавање нових карактеристика (енгл.feature request), управљање задацима (енгл.task management) и могућност прављења вики документације за сваки пројекат. Он омогућава и да сарађујете са другим људима на пројекту. ГитХаб то ради тако што омогућава централизовану локацију која дели репозиторијуме, веб-заснован интерфејс који то надгледа и функције као што јефорковање,а повлачи захтеведистрибуираних система контроле верзија,проблеме (багове) ивикије.
Битбакет
Битбакет(енгл.Bitbucket) јесервис заснован на вебуза пројекте који користе или Гит (од октобра 2011) илиМеркуријал(од лансирања)система контроле верзија.Битбакет нуди и комерцијалне планове и бесплатне налоге.
Сорсграф
Сорсграф (енгл.Sourcegraph) је Гит-ов сервис, написан уГоу.Он такође пружа дефинисање, упућивање, и функцију семантичког претраживача (кроз анализу кода у неколико језика).[65]
Комерцијални производи
Комерцијални производи су такође доступни за инсталацију у облику програма, међу њима суГитХабсофтвер (који за основу користи Гит),Стеш(који користи прилагођени приказ и основни Гит у позадини),Team Foundation Server(користиligBit2).[66]

Еклипсфондација је пријавила у свом годишњем истраживању да је од маја 2014. године, Гит најраспрострањенији алат за управљање изворним кодом, где 42,9% професионалних програмера наглашава да користи Гит као њихов примарни систем контроле извора, у поређењу са 36,3% у 2013. години, 32% у 2012. години; искључујући коришћењеГитХуб-а: 33.3% у 2014. години, 30,3% у 2013. години, 27,6% у 2012. и 12,8% у 2011. години.[67]Директоријум отвореног кодаBlack Duck Open Hubизвештава сличан однос међу пројектима отвореног кода.[68]

Британски веб-сајт за послове у области информационих технологијаitjobswatch.co.ukизвештава да се од краја септембра 2016. године, 29.27% од свих отворених конкурса на позиције за развој софтвера у Великој Британији наводе Гит,[69]испред 12,17% за МајкрософтовTeam Foundation Server,[70]10.6% заApache Subversion,[71]1.3% заМеркуријал,[72]и 0,48% заVisual SourceSafe.[73]

Сигурност

[уреди|уреди извор]

Гит не обезбеђује контролне механизме приступа, али је пројектован за операције са другим алатима који су специјализовани за контролу приступа.

Дана 17. децембра 2014. године, откривена је злоупотребаMicrosoft WindowsиМековеверзије Гит клијента. Нападач је могао да извршиарбитрарно извршавање кодана Windows-ом или Мек рачунару са инсталираним Гит-ом и тако ствара злонамерно Гит стабло (директоријум) по имену.git(директоријум у Гит-овим репозиторијумима који чува све податке у самом репозиторијуму) у другом случају би (као што су.GITили.Git,је било потребно зато што Гит не дозвољава да се верзије са свим малим словима.gitстварају ручно) стварао заражене датотеке у.git/hooksдиректоријуму (фолдер са извршним датотекама које Гит проналази) у репозиторијуму како би нападач могао да модификује репозиторијум. Ако би Windows или Мек корисници "повукли" (преузели) верзију репозиторијума са зараженим директоријумом, а затим је пребацили у свој директоријум,.gitдиректоријум би био преписан (због величине слова у Windows и Мек системима датотека) и заражени фајлови у.git/hooksсе могу покренути, што води ка томе да се нападачеве команде аутоматски извршавају. Нападач такође може модификовати датотеке са подешавањима.git/config,које омогућавају нападачу да створи заражене Гит алиасе (алиас-е за Гит-ове команде или спољне команде) или измени постојеће псеудониме како би покренуо заражене команде. Овај недостатак је отклоњен у верзији 2.2.1 Гит-а, објављеној 17. децембра 2014. године, и најављеној следећег дана.[74][75]

Верзија Гит-а 2.6.1, објављена 29. септембра 2015. године, је садржала закрпе за сигурносну рањивост (CVE-2015-7545)[76]које су омогућавале арбитрарно покретање кода.[77]Ова рањивост је могла да се искористи када би нападач убедио мету да клонира одређену УРЛ адресу, јер су неке команде уграђене у самом УРЛ-у.[78]Нападач би могао то да искористи помоћуM-I-T-M-A нападауколико би повезивање било не-енкриптовано,[78]јер би могао да преусмери корисника на одређени УРЛ. Рекурзивни клонови су били такође угрожени, јер су дозвољавали да контролор репозиторијума прецизира произвољне УРЛ адресе преко датотекеgitmodules.[78]

Гит користиSHA-1хешеве интерно.Линус Торвалдснаводи да се хеш највише користи за заштиту од неочекиваног квара.

Референце

[уреди|уреди извор]
  1. ^„Initial revision of "git", the information manager from hell”.Github. 8. 04. 2005.Приступљено20. 12. 2015.
  2. ^„Commit Graph”.Github. 8. 06. 2016.Приступљено19. 12. 2015.
  3. ^„Git's GPL license at github”.github.18. 01. 2010.Приступљено12. 10. 2014.
  4. ^„Git's LGPL license at github”.github.20. 05. 2011.Приступљено12. 10. 2014.
  5. ^Scopatz, Anthony; Huff, Kathryn D. (2015).Effective Computation in Physics.O'Reilly Media, Inc. стр. 351.ISBN9781491901595.Приступљено20. 04. 2016.
  6. ^абTorvalds, Linus (7. 04. 2005).„Re: Kernel SCM saga..”.linux-kernel(Листа адреса)."So I'm writing some scripts to try to track things a whole lot faster."
  7. ^абTorvalds, Linus(10. 06. 2007).„Re: fatal: serious inflate inconsistency”.git(Листа адреса).
  8. ^абвгдђLinus Torvalds (3. 05. 2007).Google tech talk: Linus Torvalds on git.Корисна информација се налази на: 02:30.Приступљено16. 05. 2007.
  9. ^„A Short History of Git”.Pro Git(2nd изд.). Apress. 2014.Приступљено26. 12. 2015.
  10. ^Chacon, Scott (24. 12. 2014).Pro Git(2nd изд.). New York, NY: Apress. стр. 29—30.ISBN978-1-4842-0077-3.
  11. ^„BitKeeper and Linux: The end of the road? | linux”.Archive09.linux. Архивирано изоригинала04. 03. 2016. г.Приступљено9. 1. 2016.
  12. ^McAllister, Neil (2. 05. 2005).„Linus Torvalds' BitKeeper blunder”.InfoWorld.IDG.Приступљено8. 09. 2015.
  13. ^"GitFaq: Why the 'git' name?"
  14. ^"After controversy, Torvalds begins work on 'git'"Архивиранона сајтуWayback Machine(1. фебруар 2011).
  15. ^"git(1) Manual Page".
  16. ^"Initial revision of" git ", the information manager from hell · git/git@e83c516".
  17. ^абTorvalds, Linus (27. 02. 2007).„Re: Trivia: When did git self-host?”.git(Листа адреса).
  18. ^Torvalds, Linus (6. 04. 2005).„Kernel SCM saga..”.linux-kernel(Листа адреса).
  19. ^Torvalds, Linus (17. 04. 2005).„First ever real kernel git merge!”.git(Листа адреса).
  20. ^Mackall, Matt (29. 04. 2005).„Mercurial 0.4b vs git patchbomb benchmark”.git(Листа адреса).
  21. ^Torvalds, Linus (17. 06. 2005).„Linux 2.6.12”.git-commits-head(Листа адреса).
  22. ^Torvalds, Linus (27. 07. 2005).„Meet the new maintainer...”.git(Листа адреса).
  23. ^Hamano, Junio C. (21. 12. 2005).„Announce: Git 1.0.0”.git(Листа адреса).
  24. ^Torvalds, Linus (2006-05-05).
  25. ^абTorvalds, Linus (2005-04-08).
  26. ^абTorvalds, Linus (2006-03-23).
  27. ^Torvalds, Linus (2006-10-20).
  28. ^Torvalds, Linus (2006-10-19).
  29. ^Jst's Blog on Mozillazine"bzr/hg/git performance".
  30. ^Dreier, Roland (2006-11-13).
  31. ^"Trust".
  32. ^Torvalds, Linus.
  33. ^iabervon (2005-12-22).
  34. ^"Git User's Manual".2007-08-05.
  35. ^абTorvalds, Linus (2005-04-10).
  36. ^Haible, Bruno (2007-02-11)."how to speed up" git log "?".git(Mailing list).
  37. ^Torvalds, Linus (2006-03-01).
  38. ^Hamano, Junio C. (2006-03-24).
  39. ^Hamano, Junio C. (2006-03-23).
  40. ^Torvalds, Linus (2006-11-28).
  41. ^Torvalds, Linus (2007-07-18)."git-merge(1)".
  42. ^Torvalds, Linus (18. 07. 2007).„CrissCrossMerge”.Архивирано изоригинала13. 01. 2006. г.Приступљено15. 03. 2017.
  43. ^"1.4 Getting Started – Installing Git".http://git-scm.
  44. ^„Gerrit Code Review – Project Configuration File Format”.Gerrit-review.googlesource.Приступљено9. 1. 2016.
  45. ^"downloads".
  46. ^"JGit".
  47. ^"Dulwich".
  48. ^"libgit2".
  49. ^"rugged".
  50. ^"pygit2".
  51. ^"hlibgit2".
  52. ^https://github /creationix/js-git"js-git: a JavaScript implementation of Git."
  53. ^4.4 Git on the Server – Setting Up the Server,Pro Git.
  54. ^„hosting a Git repository on windows”.Архивирано изоригинала07. 01. 2015. г.Приступљено08. 01. 2016.
  55. ^„git-instaweb manual page”.Git-scm.Приступљено9. 1. 2016.
  56. ^„Hosting git repositories”.Gitolite.Приступљено9. 1. 2016.
  57. ^„gitolite source code and description”.Github.Приступљено9. 1. 2016.
  58. ^„Gitblit Homepage”.Gitblit. 23. 11. 2015.Приступљено9. 1. 2016.
  59. ^„Wikimedia Gitblit installation”.Git.wikimedia.org. Архивирано изоригинала21. 08. 2013. г.Приступљено9. 1. 2016.
  60. ^„Gitiles Homepage”.Code.google.Приступљено9. 1. 2016.
  61. ^„Android source code repositories”.Android.googlesource.Приступљено9. 1. 2016.
  62. ^Bonobogit
  63. ^"GitLab acquires Gitorious to bolster its on premises code collaboration platform".
  64. ^"Gogs: A painless self-hosted Git service." http://gogs.io/
  65. ^"Sourcegraph: the intelligent, hackable code host." https://sourcegraph /
  66. ^"Microsoft embraces git with new TFS support, Visual Studio integration".
  67. ^"Results of Eclipse Community Survey 2012".
  68. ^"Compare Repositories – Open Hub".
  69. ^„Git (software) Jobs, Average Salary for Git Distributed Version Control System Skills”.Itjobswatch.co.uk.Приступљено30. 09. 2016.
  70. ^„Team Foundation Server Jobs, Average Salary for Microsoft Team Foundation Server (TFS) Skills”.Itjobswatch.co.uk.Приступљено30. 09. 2016.
  71. ^„Subversion Jobs, Average Salary for Apache Subversion (SVN) Skills”.Itjobswatch.co.uk.Приступљено30. 09. 2016.
  72. ^„Mercurial Jobs, Average Salary for Mercurial Skills”.Itjobswatch.co.uk.Приступљено30. 09. 2016.
  73. ^„VSS/SourceSafe Jobs, Average Salary for Microsoft Visual SourceSafe (VSS) Skills”.Itjobswatch.co.uk.Приступљено30. 09. 2016.
  74. ^Pettersen, Tim (20 December 2014).
  75. ^Hamano, J, C. (18 December 2014).
  76. ^"CVE-2015-7545".15 December 2015.
  77. ^"Git 2.6.1".29 September 2015.
  78. ^абвBlake Burkhart; et al. (5 October 2015).

Литература

[уреди|уреди извор]