Git
Originalni autor(i) | Linus Torvalds[1] |
---|---|
Programer(i) | Junio Hamano i drugi[2] |
Prvo izdanje | 7. april 2005. |
Stabilno izdanje | 2.44.0
/ 23. februar 2024. |
Repozitorijum | |
Napisan u | |
Operativni sistem | |
Platforma | |
Dostupan na | engleski |
Tip | Sistem kontrole verzija |
Licenca | GNU GPLv2[3] i GNU GPLv2.1[4] |
Veb-sajt | git-scm |
Git (transkr. git) je sistem kontrole verzija za praćenje promena u računarskim fajlovima i za koordinisan rad više ljudi na tim fajlovima. Primarno se koristi za verzionisanje koda pri razvoju softvera,[5] ali se može koristiti za praćenje promena u bilo kojim fajlovima. To je distribuirani sistem kontrole verzija čija je glavna prednost brzina,[6] integritet podataka,[7] i podrška za distribuirane, nelinearne poslove.[8]
Git je razvio Linus Torvalds, 2005. godine za potrebe razvoja Linuks jezgra, uz doprinos i drugih programera jezgra njegovom prvobitnom razvoju.[9] Njegov trenutni razvijač, od 2005. godine je Junio Hamano.
Kao i kod većine drugih distribuiranih sistema kontrole verzija, a za razliku od većine klijent-server sistema, svaki Git radni direktorijum, na svakom računaru predstavlja kompletan repozitorijum sa kompletnom istorijom i upotpunjenom mogućnošću za praćenje verzija, nezavisno od pristupa mreži ili centralnog servera.[10]
Git je slobodan softver distribuiran pod uslovima GNU-ove opšte javne licence verzije 2.
Istorija
[uredi | uredi izvor]Razvoj Git-a je počeo u aprilu 2005. godine, nakon što je mnogo programera Linuksa prepustilo pristup BitKiper-u, vlasničkom sistemu za izvornu kontrolu upravljanja (engl. source control management - SCM) koji se ranije koristio za održavanje projekta.[11] Nosilac autorskih prava nad BitKiper-om, Lari MekVoj, je povukao besplatno korišćenje proizvoda, tvrdeći da je Endru Tridgel imao obrnuto-projektovane protokole za BitKiper.[12]
Linus Torvalds je hteo distribuirani sistem koji bi mogao koristiti kao BitKiper, ali nijedan od dostupnih slobodnih sistema nije zadovoljavao njegove potrebe, posebno u smislu performansi. Torvalds je uzeo za primer sistem za izvornu kontrolu upravljanja kome je trebalo trideset sekundi da primeni zakrpu i ažurira sve povezane metapodatke, i napomenuo da to ne bi odgovaralo potrebama razvoja Linuks jezgra, gde će sinhronizacija sa ostalim izvršavanjima zahtevati 250 takvih akcija u trenutku. Hteo je da krpljenje traje tri sekunde,[6] i imao je nekoliko drugih kriterijuma u vidu:
- uzmimo sistem konkurentnog verzionisanja (engl. Concurrent Versions System - CVS) kao primer šta ne treba raditi; ako ste u nedoumici, donesite suprotnu odluku[8]
- podržava distribuirani proces rada, nalik BitKiper-ovom[8]
- veoma jake garancije protiv korupcije, bilo slučajne ili zlonamerne.[7]
Ova tri kriterijuma su eliminisala sve sisteme za kontrolisanje verzija koji su postojali u tom periodu, osim Monoton-a. Razmatranje performansi je isključilo i ovu verziju.[8] Odmah nakon objave 2.6.12-rc2 razvojne verzije Linuks jezgra,[8] Torvalds je odlučio da napiše svoj sistem.[8]
Torvalds se našalio oko naziva git, koji u slengu Britanskog Engleskog znači "neprijatno lice". Torvalds je rekao: "Ja sam egoistično kopile, i nazvaću sve moje projekte po sebi. Prvi je bio 'Linuks', a sada 'git'."[13][14] U uputstvu se Git opisuje kao "glupi tragač sadržaja".[15] U "readme" fajlu izvornog koda se još više govori o tome:[16]
Naziv "git" je dao Linus Torvalds kada je napisao prvu verziju. On je opisao ovaj alat kao "glupi prikupljač sadržaja" a naziv kao (u zavisnosti od raspoloženja):
- nasumučnu kombinaciju tri slova koja može da se izgovori, a nije zapravo iskorišćena za neku Juniks komandu. Činjenica da je to pogrešno izgovorena reč "get" nije relevantna.
- glupo, odvratno i prezirno. jednostavno. Izaberi bilo koju reč iz rečnika slenga.
- "globalni prikupljač informacija": raspoloženi ste, i on zapravo radi za vas. Anđeoski glas i svetlo, odjednom ispunjavaju prostoriju
- "g*dd*mn idiotic truckload of sh*t": kada se pokvari
Razvoj Git-a je počeo 3. aprila 2005. godine.[17] Projekat je objavljen 6. aprila,[18] i postao self-hosting od 7. aprila.[17] Prvo spajanje više grana je učinjeno 18. aprila.[19] Torvalds je postigao svoje ciljeve; 29. aprila, novonastali Git je bio upoređivan sa snimljenim zakrpama Linuks jezgra tri po stopi od 6,7 sekundi.[20] Dana 16. juna Git je dostigao izdanje 2.6.12 jezgra.[21]
Torvalds je predao održavanje Git-a 26. jula 2005. Juniu Hamanu, glavnom saradniku na projektu.[22] Hamano je bio odgovoran za puštanje verzije 1.0, 21. decembra 2005. godine, i ostao je glavni održavalac projekta.[23]
Verzija | Prvobitni datum objave | Poslednja verzija | Datum objave |
---|---|---|---|
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 |
Dizajn
[uredi | uredi izvor]Git-ov dizajn je inspirisan BitKiper-om i Monoton-om.[24][25] Git je prvobitno zamišljen kao mašina niskog nivoa sistema kontrole verzija koji su drugi mogli napisati kao prednji kraj, kao što je Kogito ili StGIT.[25] Jezgro Git projekta je od tada postalo kompletan sistem kontrole verzija koji se upotrebljivao direktno.[26] Iako je bio pod snažnim uticajem BitKiper-a, Torvalds je namerno izbegavao uobičajene pristupe, što je dovelo do jedinstvenog dizajna.[27]
Karakteristike
[uredi | uredi izvor]Git-ov dizajn je sinteza Torvaldsovog iskustva sa Linuksom u održavanju velikih distribuiranih razvojnih projekata, zajedno sa svojim vlastitim znanjem o performansama sistema datoteka dobijenog iz istog projekta kao i hitne potrebe da proizvede sistem koji radi, u kratkom roku. Ovi uslovi su doveli do sledećih izbora za implementaciju:
- Jaka podrška za nelinearni razvoj
- Git podržava brzo grananje i spajanje, i uključuje posebne alate za vizualizaciju i usmeravanje istorije nelinearnih razvoja. Glavna pretpostavka u Git-u je ta da će promena biti mnogo češće spajana nego što je napisano, jer je prošao kroz prste raznih kritičara. U Gitu su grana veoma jednostavne: grana je samo referenca ka jednom komit-u. Sa svojim nadređenim komitom, cela struktura grane se može kreirati.
- Distribuirani razvoj
- Kao Darks, BitKiper, Merkurijal, SVK, Bazar i Monoton, Git daje svakom programeru lokalnu kopiju celokupne istorije razvoja, a promene se kopiraju iz jednog repozitorijuma u drugo. Ove promene se uvoze kao dodatne razvojne grane, i mogu se i spojiti na isti način kao i lokalno razvijene grane.
- Kompatibilnost sa postojećim sistemima/protokolima
- Repozitorijumi se mogu objaviti preko HTTP-a, FTP-a, rsync-a, ili Git protokola preko bilo kojeg soketa, ili ssh. Git takođe ima CVS server emulaciju, koja omogućava korišćenje postojećih CVS klijenata i IDE dodataka za pristup Git-ovim repozitorijumima. Subverzija i SVK repozitorijumi se mogu koristiti direktno sa git-svn-om.
- Efikasno rukovođenje velikim projektima
- Torvalds je opisao Git kao veoma brz i prilagodljiv,[28] a Mozilini testovi performansi su[29] pokazali da je za red veličine brži od nekih sistema za kontrolu verzija, a preuzimanje verzije istorije iz lokalnog repozitorijuma može biti i do sto puta brže od preuzimanja sa udaljenog servera.[30]
- Kriptografska provera identiteta istorije
- Istorija Git-a se čuva na takav način da identifikacija posebne verzije (komit na jeziku Git-a) zavisi od kompletne istorije razvoja koja je dovela do tog komita. Od trenutka kada je verzija objavljena, više je nije moguće menjati neprimetno. Struktura je slična Merkelovom stablu, ali sa dodatnim podacima na čvorovima i listovima.[31] (Merkurijal i Monoton takođe imaju ovakvo svojstvo.)
- Dizajn baziran na alatima
- Git je osmišljen kao skup programa pisanih u C-u, kao i skup skripti koje predstavljaju dopunu tih programa.[32] Iako je većina tih skripti napisana u C-u zbog brzine i prenosivosti, dizajn je ostao isti, a i lako je bilo povezati komponente zajedno.[33]
- Strategije priključnog spajanja
- Kao deo svog dizajna nalik alatu, Git ima dobro definisan model nedovršenog spajanja, i ima veći broj algoritama koji mogu da potpomognu u tom segmentu, što je kulminiralo time da je saopštavao korisniku da nije u stanju da automatski kompletira spajanje i da je potrebno ručno izmeniti.
- Smeće se nagomilava ukoliko nije sakupljeno
- Prekidanje operacija ili opozivanje promena će ostaviti veliki broj beskorisnih objekata u bazi podataka. To su uglavnom mali delići istorije objekata koji su u stalnom porastu. Git će automatski obavljati sakupljanje smeća kada se nepotrebni predmeti prikupe u repozitorijumu. Smeće se može eksplicitno pozvati korišćenjem
git gc --prune
.[34]
- Periodično eksplicitno slaganje objekata
- Git čuva svaki novonastali objekat kao poseban fajl. Iako je pojedinačno kompresovan, on zauzima mnogo porostora i vrlo je neefikasan. Ovaj problem je rešen stvaranjem paketa koji skladište veliki broj objekata u jednoj datoteci (ili protok mrežnih bajtova) po imenu packfile, koji je delta-kompresovan. Paketi su kompresovani korišćenjem heuristike po kojoj su fajlovi sa istim imenom verovatno slični. Odgovarajući indeks fajl se kreira za svaki packfile, i obeležava svaki objekat u njemu. Novi objekti (novostvorena istorija) se i dalje čuvaju pojedinačno, i periodično prepakivanje je neophodno radi održavanja efikasnosti prostora. Proces pakovanja repozitorijuma može biti veoma skup. Dozvolom da objekti postoje u repozitorijumu za nepotregne fajlove, ali u brzo proizvedenom formatu, Git omogućava da rad sa skupim paketima bude odložen za kasnije, kada vreme nije bitno (npr. na kraju radnog dana). Git vrši automatsko periodično prepakovanje, ali je i za korisnike prepakivanje moguće uz pomoć komande
git gc
. Zbog celosti podataka, i packfile i njegov indeks imaju SHA-1 kontrolni zbir u sebi, a njega takođe sadrži i ime datoteke. Da biste proverili integritet, pokrenite komandugit fsck
.
Još jedna osobina Git-a je da je snima grananje direktorijuma fajlova. Najraniji sistemi za kontrolu izvornog koda (engl. Source Code Control System - SCCS) i sistemi za kontrolu revizija (engl. Revision Control System - RCS), radili su na pojedinačnim fajlovima i omogućavali uštedu prostora stečenog od prošaranih delti (SCCS) ili delta kodiranja (RCS) (uglavnom sličnih) verzija. Kasnija revizija kontrolnih sistema dovela je do toga da je fajl imao identitet kroz više revizija projekta. Međutim, Torvalds je odbacio ovaj koncept.[35] Shodno tome, Git ne snima eksplicitno revizije odnosa na bilo kom nivou ispod grane izvornog koda.
Odnosi implicitnih revizija imaju neke značajne posledice:
- Znatno je skuplje izvršiti promenu cele istorije jednog fajla nego ceo jedan projekat.[36] Da bi dobili istoriju promena koje utiču na datu datoteku, Git mora da prođe kroz globalnu istoriju, a onda i da utvrdi da li svaka promena modifikuje taj fajl. Ovaj metod pregleda istorije, međutim, daje Git-u mogućnost da proizvodi sa jednakom efikasnošću jednu istoriju koja prikazuje promene na proizvoljan skup datoteka. Na primer, poddirektorijum izvornog stabla plus povezano globalno zaglavlje datoteke je vrlo čest slučaj.
- Preimenovanje se češće vrši implicitno nego eksplicitno. Zajednički prigovor CVS-a je da on koristi naziv datoteke kako bi identifikovao svoju istoriju revizija, pa premeštanje ili preimenovanje fajla nije moguće bez prekidanja svoje istorije, ili preimenovanja istorije što bi napravilo istoriju netačnom. Većina sistema kontrole revizija posle CVS-a rešava ovaj ppoblem davanjem jedinstvenog imena datoteci (analogno i-nod broju) na koga ne utiče preimenovanje. Git ne podržava takav identifikator, a za to se tvrdi da je prednost.[37][38] Fajlovi izvornog koda su ponekad raštrkani, spojeni ili prosto preimenovani,[39] pa bi njihovo predstavljanje kao jednostavna preimenovanja, zamrznulo netačan opis onoga što se dogodilo u (nepromenljivoj) istoriji. Git češće prepoznaje greške detektovanjem promene imena prilikom pretraživanja istorije snimaka nego snimanjem iste kada pravi snimak.[40] (Ukratko, ako je fajl u nekoj N reviziji, fajlovi sa istim imenom u reviziji N-1 predstavljaju njegove podrazumevane pretke. Međutim, kada ne postoji kao naziv datoteke u reviziji N-1, Git traži fajl koji je postojao samo u reviziji N-1 i koji je veoma sličan novom fajlu.) Međutim, to zahteva znatno intenzivniji rad procesora svaki put kad se pregleda istorija i nekoliko opcija kako bi se podesila heuristika. Ovaj mehanizam ne funkcioniše uvek; ponekad, fajl koji je preimenovan sa promenama, u istom komitu se čita kao brisanje stare datoteke i vodi ka stvaranju novog fajla. Programeri mogu da rade oko ovog ograničenja komitovanjem preimenovanja i izmena odvojeno.
Git podržava nekoliko strategija spajanja; nepodrazumeva se može izabrati u trenutku spajanja:[41]
- resolve: tradicionalni algoritam spajanja na tri načina
- recursive: ovo je podrazumevana opcija prilikom povlačenja ili spajanja jedne grane i to je varijanta algoritma spajanja na tri načina.
Kada postoji više od jednog zajedničkog pretka koji mogu da se koriste za spajanje na tri načina, ono kreira spojeno stablo zajedničkih predaka i to koristi kao referentno stablo za spajanje na tri načina. Kao rezultat ovoga, prijavljeno je mnogo manje konflikta pri spajanju, bez nastanka međuspajanja u urađenim testovima na spojenim komitima, u istoriji razvoja Linuks 2.6 jezgra. Takođe, ovo može da otkrije i rukuje spajanjima koje uključuju preimenovanja.
- octopus: ovo je podrazumevana opcija prilikom spajanja dve ili više glava.
Strukture podataka
[uredi | uredi izvor]Git-ove primitive nisu inherentno sistem za izvornu kontrolu upravljanja. Torvalds objašnjava,[35]
Na mnogo načina se git može posmatrati kao sistem fajlova - on ima mogućnost adresiranja sadržaja, verzionisanja, ali sam ga ja zaista dizajnirao da pristupi problemu sa stanovišta sistema fajlova kao osobe (hej, ja se bavim jezgrima)i u stvari imam nultu toleranciju u kreiranju tradicionalnih sistema za izvornu kontrolu upravljanja.
Od ovog inicijalnog dizajna, Git je razvio kompletan set funkcija koje se očekuju od tradicionalnog sistema za izvornu kontrolu upravljanja,[26] sa funkcijama uglavnom stvorenih po potrebi, umesto uređivanih i proširivanih tokom vremena.
Git ima dve strukture podataka: promenljiv indeks (koji se još naziva i faza ili keš) koji kešira informacije o radnom direktorijumu i komitovanju naredne revizije; i nepromenljiv, u kome se samo dodaju objekti u bazu podataka.
Indeks služi kao veza između objekta baze podataka i radnog stabla.
Objekat baze podataka sadrži četiri vrste objekata:
- BLOB (binarni veliki objekat) je sadržaj datoteke. BLOB-ovi nemaju ime datoteke, vremenske oznake, niti druge metapodatke. (Naziv bloba interno je heš sopstvenog sadržaja.)
- Stablo objekat je ekvivalent direktorijumu. Ono sadrži spisak imena fajlova, svaki sa nekim tipom bita i ime BLOB-a ili stabla objekta koji čine taj fajl, simbolički link ili sadržaj direktorijuma. Ovaj objekat opisuje snimak izvornog stabla.
- Komit objekat povezuje stablo objekat zajedno u istoriju. On sadrži naziv stabla objekta (najvišeg izvora u direktorijumu), vremensku oznaku, evidenciju poruka i imena nula ili više nadređenih komit objekata.
- Oznaka objekat je kontejner koji sadrži referencu na drugi objekat i može da primi dodatne meta podatke koji se odnose na drugi predmet. Najčešće se koristi za skladištenje digitalnih potpisa za komit objekte koji odgovaraju određenim verzijama podataka koji su praćeni od strane Git-a.
Svaki objekat se identifikuje SHA-1 hešom njegovog sadržaja. Git izračunava heš, i koristi ovu vrednost za ime objekta. Objekat se stavlja u direktorijum koji se podudara sa prva dva slova njegovog heša. Ostatak heša se koristi kao ime fajla za taj objekat.
Git čuva svaku reviziju datoteke kao jedinstveni blob. Odnosi između blobova se mogu naći putem ispitivanja stabla i komit objekata. Nedavno dodati objekti su smešteni u celini pomoću zlib kompresije. Ovo može zauzeti dosta prostora na disku za kratko vreme, tako da predmeti mogu da se kombinuju u pakete, koji koriste delta kompresiju kako bi štedeli prostor, skladištenje blobova kao i njihove promene u odnosu na druge blobove.
Git serveri se obično slušaju na TCP portu 9418.[43]
Reference
[uredi | uredi izvor]Svaki objekat u Git bazi podataka koji se ne odnosi na njega se može očistiti pomoću komande garbage collection, ili automatski. Objekat može biti referenciran od strane drugog objekta, ili eksplicitno referenciran. Git prepoznaje različite vrste referenci. Komande za kreiranje, premeštanje i brisanje referenci variraju. "git show-ref" lista navodi sve reference. Neke vrste su:
- heads: odnosi se na lokalni objekat.
- remotes: odnosi se na objekat koji postoji u udaljenom repozitorijumu .
- stash: odnosi se na objekat koji još nije izvršen.
- meta: na primer. konfiguracija u repozitorijumu, korisnička prava. refs/meta/config imenski prostor je uveo Gerit (softver)[44]
- tags: videti iznad.
Implementacije
[uredi | uredi izvor]Git je prvenstveno razvijen na Linuksu, iako podržava većinu glavnih operativnih sistema, uključujući BSD, Solaris, OS X i Microsoft Windows.[45]
Prvi Microsoft Windows "port" za Git je, pre svega, Linuksova emulacija frejmvorka koji hostuje Linuks verziju. Instaliranje Git-a pod Windows-om kreira sličan Program Files direktorijum koji sadrži 5.236 datoteka u 580 direktorijuma. Ovo uključuje MinGW port GNU-ove kolekcije kompajlera, Perl 5, msys2.0 (Cygwin fork, emulacioni frejmvork za Windows nalik Juniksu) i razne druge Windows portove ili emulatore iz pomoćnih biblioteka Linuksa. Trenutne nativne verzije za Windows se distribuiraju kao 32-bitne i 64-bitne instalacije.
JGit implementacija Git-a je Java biblioteka, dizajnirana da bude ugrađena u bilo kojoj Java aplikaciji. JGit se koristi u Gerit alatu za proveru koda i EGit, Git klijent za Eklips okruženje.[46]
Dulwich implementacija Git-a je čista Pajtonova softverska komponenta za Pajton 2.[47]
libgit2 implementacija Git-a je ANSI C softverska biblioteka, koja može biti izgrađena na više platformi, uključujući Microsoft Windows, Linuks, Mek OS X, i BSD.[48] Vezana je za mnoge programske jezike, uključujući Rubi, Pajton i Haskel.[49][50][51]
JS-Git je Javaskript implementacija koja predstavlja podskup Git-a.[52]
Git server
[uredi | uredi izvor]Pošto je Git distribuirani sistem kontrole verzija, on se može koristiti kao samostalni server. Posvećeni Git serverski softver pomaže, pored ostalih karakteristika, pri dodavanju kontrolog pristupa, i prikazuje sadržaj Git-ovog repozitorijuma putem veba, a pomaže i prilikom organizovanja većeg broja repozitorijuma.
- Daljinsko skladištenje fajlova i pristup preko ljuske
- Git repozitorijum može da se klonira u zajednički sistem datoteka, a mogu mu pristupati i druge osobe. Takođe mu se može pristupiti preko daljinske ljuske uz instalaciju Git-ovog softvera koji omogućava korisniku da se prijavi.[53]
- Git demon, automatski-veb
- Git demon (engl. Git daemon) omogućava korisnicima da dele svoj repozitorijum kolegama. Git automatski-veb omogućava korisnicima da obezbede veb pregled nekog repozitorijuma. Od aprila 2014. godine automatski-veb ne radi na Windows-u. Oba se mogu videti u liniji Merkurijalove "HG usluge".[54][55]
- Gitolit
- Gitolit (engl. Gitolite) je oblik kontrole pristupa u okviru Git-a, koji pruža solidnu kontrolu pristupa Git-ovim repozitorijumima. Uz pomoć drugih softvera on može da ima daljinski uvid u repozitorijume na serveru.[56][57]
- Apač Alura
- Apač Alura (engl. Apache Allura) je razvijeni softver otvorenog koda za upravljanje repozitorijumima slobodnog koda, izveštavanje o bagovima, diskusije, viki stranice, blogove i više za bilo koje pojedinačne projekate.
- Gerit
- Gerit (engl. Gerrit) obezbeđuje dve od tri funkcionalnosti: kontrolu pristupa i upravljanje repozitorijumom. Koristi jGit. Uvid u repozitorijum je povezan npr. ili sa Gitolit-om ili Gitblit-om.
- Gitblit
- Gitblit (engl. Gitblit) omogućava sve tri funkcije, ali se u većim instalacijama koristi kao pretraživač repozitorijuma koji je instaliran zajedno sa Gerit-om radi kontrole pristupa i upravljanja repozitorijumom.[58][59]
Gitblit takođe može da obezbedi opciju sinhronizacije za druge repozitorijume.
- Gitils
- Gitils (engl. Gitiles) je jednostavan pretraživač repozitorijuma, koji se najčešće koristi zajedno sa Gerit-om.[60][61]
- Bonobo Git server
- Bonobo Git Server (engl. Bonobo Git Server) je jednostavan Git server za Windows implementacije kao što je ASP.NET kapija.[62] On se oslanja na mehanizme zaštite koje pruža Windows Internet informacioni servis, tako da ne podržava SSH pristup, ali se lako može povezati sa aktivnim direktorijumom.
- Gitorius
- Gitorius (engl. Gitorious) je slobodan softver iza Git-ovog servisa za pravljenje repozitorijuma istog imena. U martu 2015, Gitorius je kupio GitLab.[63]
- GitLab
- GitLab (engl. GitLab) pruža usluge softverskog repozitorijuma. On omogućava internet interfejs kao što je GitHab, a napisan je u Rubi-ju.
- Gogs
- Gogs (engl. Gogs) je još jedan Git servis, napisan u Gou. Pruža slične funkcije GitHab-u kao veb interfejs.[64]
- GitHab
- GitHab (engl. GitHub) je veb-baziran skladišni hosting servis na kome možete postaviti kopiju svog Git repozitorijuma. To je Git-ov servis za pravljenje repozitorijuma, koji nudi sve funkcije distribuiranu kontrolu revizija i menadžment izvornog koda, dodajući svoje karakteristike. Za razliku od Git-a, koji je striktno alat koji se koristi iz komandne linije, GitHab pruža veb-baziran grafički interfejs, radnu površinu i mobilnu integraciju. Takođe pruža kontrolu pristupa i nekoliko funkcija za saradnju, kao što su praćenje grešaka (engl. bug tracking), zahteve za dodavanje novih karakteristika (engl. feature request), upravljanje zadacima (engl. task management) i mogućnost pravljenja viki dokumentacije za svaki projekat. On omogućava i da sarađujete sa drugim ljudima na projektu. GitHab to radi tako što omogućava centralizovanu lokaciju koja deli repozitorijume, veb-zasnovan interfejs koji to nadgleda i funkcije kao što je forkovanje, a povlači zahteve distribuiranih sistema kontrole verzija, probleme (bagove) i vikije.
- Bitbaket
- Bitbaket (engl. Bitbucket) je servis zasnovan na vebu za projekte koji koriste ili Git (od oktobra 2011) ili Merkurijal (od lansiranja) sistema kontrole verzija. Bitbaket nudi i komercijalne planove i besplatne naloge.
- Sorsgraf
- Sorsgraf (engl. Sourcegraph) je Git-ov servis, napisan u Gou. On takođe pruža definisanje, upućivanje, i funkciju semantičkog pretraživača (kroz analizu koda u nekoliko jezika).[65]
- Komercijalni proizvodi
- Komercijalni proizvodi su takođe dostupni za instalaciju u obliku programa, među njima su GitHab softver (koji za osnovu koristi Git), Steš (koji koristi prilagođeni prikaz i osnovni Git u pozadini), Team Foundation Server (koristi ligBit2).[66]
Usvajanje
[uredi | uredi izvor]Eklips fondacija je prijavila u svom godišnjem istraživanju da je od maja 2014. godine, Git najrasprostranjeniji alat za upravljanje izvornim kodom, gde 42,9% profesionalnih programera naglašava da koristi Git kao njihov primarni sistem kontrole izvora, u poređenju sa 36,3% u 2013. godini, 32% u 2012. godini; isključujući korišćenje GitHub-a: 33.3% u 2014. godini, 30,3% u 2013. godini, 27,6% u 2012. i 12,8% u 2011. godini.[67] Direktorijum otvorenog koda Black Duck Open Hub izveštava sličan odnos među projektima otvorenog koda.[68]
Britanski veb-sajt za poslove u oblasti informacionih tehnologija itjobswatch.co.uk izveštava da se od kraja septembra 2016. godine, 29.27% od svih otvorenih konkursa na pozicije za razvoj softvera u Velikoj Britaniji navode Git,[69] ispred 12,17% za Majkrosoftov Team Foundation Server,[70] 10.6% za Apache Subversion,[71] 1.3% za Merkurijal,[72] i 0,48% za Visual SourceSafe.[73]
Sigurnost
[uredi | uredi izvor]Git ne obezbeđuje kontrolne mehanizme pristupa, ali je projektovan za operacije sa drugim alatima koji su specijalizovani za kontrolu pristupa.
Dana 17. decembra 2014. godine, otkrivena je zloupotreba Microsoft Windows i Mekove verzije Git klijenta. Napadač je mogao da izvrši arbitrarno izvršavanje koda na Windows-om ili Mek računaru sa instaliranim Git-om i tako stvara zlonamerno Git stablo (direktorijum) po imenu .git (direktorijum u Git-ovim repozitorijumima koji čuva sve podatke u samom repozitorijumu) u drugom slučaju bi (kao što su .GIT ili .Git, je bilo potrebno zato što Git ne dozvoljava da se verzije sa svim malim slovima .git stvaraju ručno) stvarao zaražene datoteke u .git/hooks direktorijumu (folder sa izvršnim datotekama koje Git pronalazi) u repozitorijumu kako bi napadač mogao da modifikuje repozitorijum. Ako bi Windows ili Mek korisnici "povukli" (preuzeli) verziju repozitorijuma sa zaraženim direktorijumom, a zatim je prebacili u svoj direktorijum, .git direktorijum bi bio prepisan (zbog veličine slova u Windows i Mek sistemima datoteka) i zaraženi fajlovi u .git/hooks se mogu pokrenuti, što vodi ka tome da se napadačeve komande automatski izvršavaju. Napadač takođe može modifikovati datoteke sa podešavanjima .git/config, koje omogućavaju napadaču da stvori zaražene Git aliase (alias-e za Git-ove komande ili spoljne komande) ili izmeni postojeće pseudonime kako bi pokrenuo zaražene komande. Ovaj nedostatak je otklonjen u verziji 2.2.1 Git-a, objavljenoj 17. decembra 2014. godine, i najavljenoj sledećeg dana.[74][75]
Verzija Git-a 2.6.1, objavljena 29. septembra 2015. godine, je sadržala zakrpe za sigurnosnu ranjivost (CVE-2015-7545)[76] koje su omogućavale arbitrarno pokretanje koda.[77] Ova ranjivost je mogla da se iskoristi kada bi napadač ubedio metu da klonira određenu URL adresu, jer su neke komande ugrađene u samom URL-u.[78] Napadač bi mogao to da iskoristi pomoću M-I-T-M-A napada ukoliko bi povezivanje bilo ne-enkriptovano,[78] jer bi mogao da preusmeri korisnika na određeni URL. Rekurzivni klonovi su bili takođe ugroženi, jer su dozvoljavali da kontrolor repozitorijuma precizira proizvoljne URL adrese preko datoteke gitmodules.[78]
Git koristi SHA-1 heševe interno. Linus Torvalds navodi da se heš najviše koristi za zaštitu od neočekivanog kvara.
Vidi još
[uredi | uredi izvor]Reference
[uredi | uredi izvor]- ^ „Initial revision of "git", the information manager from hell”. Github. 8. 04. 2005. Pristupljeno 20. 12. 2015.
- ^ „Commit Graph”. Github. 8. 06. 2016. Pristupljeno 19. 12. 2015.
- ^ „Git's GPL license at github.com”. github.com. 18. 01. 2010. Pristupljeno 12. 10. 2014.
- ^ „Git's LGPL license at github.com”. github.com. 20. 05. 2011. Pristupljeno 12. 10. 2014.
- ^ Scopatz, Anthony; Huff, Kathryn D. (2015). Effective Computation in Physics. O'Reilly Media, Inc. str. 351. ISBN 9781491901595. Pristupljeno 20. 04. 2016.
- ^ a b Torvalds, Linus (7. 04. 2005). „Re: Kernel SCM saga..”. linux-kernel (Lista adresa). "So I'm writing some scripts to try to track things a whole lot faster."
- ^ a b Torvalds, Linus (10. 06. 2007). „Re: fatal: serious inflate inconsistency”. git (Lista adresa).
- ^ a b v g d đ Linus Torvalds (3. 05. 2007). Google tech talk: Linus Torvalds on git. Korisna informacija se nalazi na: 02:30. Pristupljeno 16. 05. 2007.
- ^ „A Short History of Git”. Pro Git (2nd izd.). Apress. 2014. Pristupljeno 26. 12. 2015.
- ^ Chacon, Scott (24. 12. 2014). Pro Git (2nd izd.). New York, NY: Apress. str. 29—30. ISBN 978-1-4842-0077-3.
- ^ „BitKeeper and Linux: The end of the road? | linux.com”. Archive09.linux.com. Arhivirano iz originala 04. 03. 2016. g. Pristupljeno 9. 1. 2016.
- ^ McAllister, Neil (2. 05. 2005). „Linus Torvalds' BitKeeper blunder”. InfoWorld. IDG. Pristupljeno 8. 09. 2015.
- ^ "GitFaq: Why the 'git' name?"
- ^ "After controversy, Torvalds begins work on 'git'" Arhivirano na sajtu Wayback Machine (1. februar 2011).
- ^ "git(1) Manual Page".
- ^ "Initial revision of "git", the information manager from hell · git/git@e83c516".
- ^ a b Torvalds, Linus (27. 02. 2007). „Re: Trivia: When did git self-host?”. git (Lista adresa).
- ^ Torvalds, Linus (6. 04. 2005). „Kernel SCM saga..”. linux-kernel (Lista adresa).
- ^ Torvalds, Linus (17. 04. 2005). „First ever real kernel git merge!”. git (Lista adresa).
- ^ Mackall, Matt (29. 04. 2005). „Mercurial 0.4b vs git patchbomb benchmark”. git (Lista adresa).
- ^ Torvalds, Linus (17. 06. 2005). „Linux 2.6.12”. git-commits-head (Lista adresa).
- ^ Torvalds, Linus (27. 07. 2005). „Meet the new maintainer...”. git (Lista adresa).
- ^ Hamano, Junio C. (21. 12. 2005). „Announce: Git 1.0.0”. git (Lista adresa).
- ^ Torvalds, Linus (2006-05-05).
- ^ a b Torvalds, Linus (2005-04-08).
- ^ a b Torvalds, Linus (2006-03-23).
- ^ Torvalds, Linus (2006-10-20).
- ^ Torvalds, Linus (2006-10-19).
- ^ Jst's Blog on Mozillazine "bzr/hg/git performance".
- ^ Dreier, Roland (2006-11-13).
- ^ "Trust".
- ^ Torvalds, Linus.
- ^ iabervon (2005-12-22).
- ^ "Git User's Manual". 2007-08-05.
- ^ a b Torvalds, Linus (2005-04-10).
- ^ Haible, Bruno (2007-02-11). "how to speed up "git log"?". git (Mailing list).
- ^ Torvalds, Linus (2006-03-01).
- ^ Hamano, Junio C. (2006-03-24).
- ^ Hamano, Junio C. (2006-03-23).
- ^ Torvalds, Linus (2006-11-28).
- ^ Torvalds, Linus (2007-07-18). "git-merge(1)".
- ^ Torvalds, Linus (18. 07. 2007). „CrissCrossMerge”. Arhivirano iz originala 13. 01. 2006. g. Pristupljeno 15. 03. 2017.
- ^ "1.4 Getting Started – Installing Git". https://git-scm.com.
- ^ „Gerrit Code Review – Project Configuration File Format”. Gerrit-review.googlesource.com. Pristupljeno 9. 1. 2016.
- ^ "downloads".
- ^ "JGit".
- ^ "Dulwich".
- ^ "libgit2".
- ^ "rugged".
- ^ "pygit2".
- ^ "hlibgit2".
- ^ https://github.com/creationix/js-git "js-git: a JavaScript implementation of Git."
- ^ 4.4 Git on the Server – Setting Up the Server, Pro Git.
- ^ „hosting a Git repository on windows”. Arhivirano iz originala 07. 01. 2015. g. Pristupljeno 08. 01. 2016.
- ^ „git-instaweb manual page”. Git-scm.com. Pristupljeno 9. 1. 2016.
- ^ „Hosting git repositories”. Gitolite.com. Pristupljeno 9. 1. 2016.
- ^ „gitolite source code and description”. Github.com. Pristupljeno 9. 1. 2016.
- ^ „Gitblit Homepage”. Gitblit.com. 23. 11. 2015. Pristupljeno 9. 1. 2016.
- ^ „Wikimedia Gitblit installation”. Git.wikimedia.org. Arhivirano iz originala 21. 08. 2013. g. Pristupljeno 9. 1. 2016.
- ^ „Gitiles Homepage”. Code.google.com. Pristupljeno 9. 1. 2016.
- ^ „Android source code repositories”. Android.googlesource.com. Pristupljeno 9. 1. 2016.
- ^ Bonobogit
- ^ "GitLab acquires Gitorious to bolster its on premises code collaboration platform".
- ^ "Gogs: A painless self-hosted Git service." https://gogs.io/
- ^ "Sourcegraph: the intelligent, hackable code host." https://sourcegraph.com/
- ^ "Microsoft embraces git with new TFS support, Visual Studio integration".
- ^ "Results of Eclipse Community Survey 2012".
- ^ "Compare Repositories – Open Hub".
- ^ „Git (software) Jobs, Average Salary for Git Distributed Version Control System Skills”. Itjobswatch.co.uk. Pristupljeno 30. 09. 2016.
- ^ „Team Foundation Server Jobs, Average Salary for Microsoft Team Foundation Server (TFS) Skills”. Itjobswatch.co.uk. Pristupljeno 30. 09. 2016.
- ^ „Subversion Jobs, Average Salary for Apache Subversion (SVN) Skills”. Itjobswatch.co.uk. Pristupljeno 30. 09. 2016.
- ^ „Mercurial Jobs, Average Salary for Mercurial Skills”. Itjobswatch.co.uk. Pristupljeno 30. 09. 2016.
- ^ „VSS/SourceSafe Jobs, Average Salary for Microsoft Visual SourceSafe (VSS) Skills”. Itjobswatch.co.uk. Pristupljeno 30. 09. 2016.
- ^ Pettersen, Tim (20 December 2014).
- ^ Hamano, J, C. (18 December 2014).
- ^ "CVE-2015-7545". 15 December 2015.
- ^ "Git 2.6.1". 29 September 2015.
- ^ a b v Blake Burkhart; et al. (5 October 2015).
Literatura
[uredi | uredi izvor]- Scopatz, Anthony; Huff, Kathryn D. (2015). Effective Computation in Physics. O'Reilly Media, Inc. str. 351. ISBN 9781491901595. Pristupljeno 20. 04. 2016.