-
1. Početak
- 1.1 O kontroli verzije
- 1.2 Kratka istorija Gita
- 1.3 Osnove Gita
- 1.4 Komandna linija
- 1.5 Instaliranje Gita
- 1.6 Podešavanja za prvi put
- 1.7 Traženje pomoći
- 1.8 Rezime
-
2. Osnove Gita
- 2.1 Pravljenje Git repozitorijuma
- 2.2 Snimanje promena na repozitorijumu
- 2.3 Pregled istorije komitova
- 2.4 Opovrgavanje
- 2.5 Rad sa udaljenim repozitorijumima
- 2.6 Tagovanje
- 2.7 Alijasi
- 2.8 Rezime
-
3. Grananje u Gitu
- 3.1 Grananje ukratko
- 3.2 Osnove grananja i spajanja
- 3.3 Upravljanje granama
- 3.4 Tokovi rada sa grananjem
- 3.5 Udaljene grane
- 3.6 Rebaziranje
- 3.7 Rezime
-
4. Git on the Server
- 4.1 Protokoli
- 4.2 Postavljanje Gita na server
- 4.3 Generisanje javnog SSH ključa
- 4.4 Podešavanje servera
- 4.5 Git Daemon
- 4.6 Pametan HTTP
- 4.7 GitWeb
- 4.8 Opcije za hostovanje koje nude treća lica
- 4.9 Rezime
-
5. Distribuirani Git
- 5.1 Distribuirani tokovi rada
- 5.2 Kako doprineti projektu
- 5.3 Održavanje projekta
- 5.4 Rezime
-
6. GitHub
-
7. Git Tools
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Summary
-
8. Prilagođavanje Gita
- 8.1 Konfiguracija Gita
- 8.2 Git atributi
- 8.3 Git hukovi
- 8.4 Primer polise sprovedene od strane Gita
- 8.5 Rezime
-
9. Git i ostali sistemi
- 9.1 Git kao klijent
- 9.2 Migriranje na Git
- 9.3 Rezime
-
10. Git iznutra
- 10.1 Vodovod i porcelan
- 10.2 Git objekti
- 10.3 Git reference
- 10.4 Paketoteke
- 10.5 Refspek
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Summary
-
A1. Appendix A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Summary
-
A2. Appendix B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
4.7 Git on the Server - GitWeb
GitWeb
Sada kada imate podešene osnovne načine pristupa projektu, možda ćete želeti da podesite i jednostavan vizuelizator baziran na vebu. Git dolazi sa CGI skriptom GitWeb koja se ponekad koristi za ovo.

Ako želite da pogledate kako bi GitWeb izgleda na vašem projektu, Git dolazi sa komandom koja može da podigne privremenu instancu ako imate lagan server na sistemu kao što je lighttpd
ili webrick
.
Na Linuks mašinama je često instaliran lighttpd
, tako da možete da ga pokrenete tako što ćete ukucati git instaweb
u direktorijumu projekta.
Ako koristite Mek, Leopard dolazi sa već instaliranim Rubijem, tako da bi trebalo da imate najviše poverenja u webrick
.
Da biste pokrenuli instaweb
pomoću nekog drugog hendlera, a ne preko nighttpd
-a, možete da ga pokrenete pomoću opcije --httpd
.
$ git instaweb --httpd=webrick
[2009-02-21 10:02:21] INFO WEBrick 1.3.1
[2009-02-21 10:02:21] INFO ruby 1.8.6 (2008-03-03) [universal-darwin9.0]
Ovo pokreće HTTPD server na portu 1234 i onda automatski pokreće veb-brauzer koji otvara tu stranicu.
Prilično je jednostavno s vaše strane.
Kada ste završili razgledanje i želite da ugasite server, možete da pokrenete istu komandu koristeći opciju --stop
.
$ git instaweb --httpd=webrick --stop
Ako želite da pokrenete veb-interfejs na serveru sve vreme za vaš tim ili za projekat otvorenog koda koji hostujete, moraćete da podesite CGI skriptu koju će pružiti vaš uobičajeni veb-server.
Neke Linuks distribucije imaju paket gitweb
koji možete da instalirate putem apt
ili yum
, tako da možete da prvo probate to.
Ubrzo ćemo praći na ručno instaliranje GitWeb-a.
Prvo, morate da dođete do Gitovog izvornog koda koji dolazi u GitWeb, i da generišete CGI skriptu.
$ git clone git://git.kernel.org/pub/scm/git/git.git
$ cd git/
$ make GITWEB_PROJECTROOT="/opt/git" prefix=/usr gitweb
SUBDIR gitweb
SUBDIR ../
make[2]: `GIT-VERSION-FILE' is up to date.
GEN gitweb.cgi
GEN static/gitweb.js
$ sudo cp -Rf gitweb /var/www/
Obratite pažnju na to da morate da kažete komadi gde da nađe vaše Git repozitorijume pomoću promenljive GITWEB_PROJECTROOT
.
Sada, treba da omogućite Apache-u da koristi CGI za tu skriptu, za šta možete da dodate VirtualHost:
<VirtualHost *:80>
ServerName gitserver
DocumentRoot /var/www/gitweb
<Directory /var/www/gitweb>
Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
AllowOverride All
order allow,deny
Allow from all
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
</Directory>
</VirtualHost>
Opet, GitWeb može biti serviran pomoću bilo kog veb-servera koji je sposoban da pokrene CGI ili Perl; a čak i ako preferirate nešto drugo, ne bi trebalo da bude previše teško za podešavanje.
Sada bi trebalo da možete da posetite http://gitserver/
i da pogledate svoje repozitorijume onlajn.
/¿¿¿¿=== GitLab/
Ipak, GitWeb je prilično jednostavan. Ako vam treba moderniji Git server sa više opcija, ima nekoliko rešenja otvorenog koda koje možete da instalirate umesto toga. Kako je GitLab jedan od popularnijih, pokrićemo njegovu instalaciju i korišćenje kao primer. Ovo je malo sloćenije od opcije sa GitWeb-om i veorvatno zahteva više muke oko održavanja, ali zbog toga pruža mnogo više mogućnosti.
Instalacija
GitLab je veb-aplikacija koja se oslanja na bazu podataka, tako da je njena instalacija malo komplikovanija od nekih drugih git servera. Srećom, proces je dosta dobro dokumentovan.
Ima nekoliko načina na koje možete da instalirate GitLab. Da biste što pre videli krajnji rezultat, možete da preuzmete sliku virtuelne mašine ili instalaciju "na jedan klik" sa https://bitnami.com/stack/gitlab, a zatim da promenite konfiguraciju tako da odgvara vašem okruženju. Jedna lepa sitnica koju je Bitnami dodao jeste ekran za prijavljivanje (kojem se pristupa kucanjem alt-→); on vam govori IP adresu i podrazumevano korisničko ime i šifru za instalirani GitLab.

Za sve drugo, pratite uputstva sa GitLab Community Edition, koje možete naći na https://gitlab.com/gitlab-org/gitlab-ce/tree/master. Tamo ćete naći podršku za instaliranje GitLaba korišćenjem Chef recipes, virtuelne mašine na Digital Ocean, i RPM i DEB pakete (koji su, u trenutku pisanja ovoga, u beta verziji). Postoji i "nezvanično" uputstvo za podešavanje GitLava sa nestandardnim operativnim sistemima i batama podataka, skripta za kompletno ručno instaliranje, i još mnogo toga.
Administracija
GitLabovom interfejsu za administraciju se pristupa preko veba.
Jednsotavno ukažite svoj brauzeru na ime hosta ili IP adresu gde je GitLab instaliran i prijavite se kao administrator.
Podrazumevano korisničko ime je admin@local.host
, a podrazumevana šifra je 5iveL!fe
(i imaćete mogućnost da je promenite čim je ukucate).
Kada se prijavite, kliknite na ikonicu "Admin area" u gornjem desnom uglu.
Korisnici
Korisnici na GitLabu su nalozi koji odgovaraju ljudima.
Korisnički nalozi nisu složeni; u suštini se radi o skupu ličnih podataka vezanih za podatke za prijavu.
Svaki korisnik dolazi uz nejmspejs, odnosno logično zgrupisane projekte koji pripadaju tom korisniku.
Ako korisnik jane
ima pristup projektu pod imenom project
, URL tog projekta bi bio http://server/jane/project.

Uklanjanje korisnika se može obaviti na dva načina. "Blokiranje" korisnika mu zabranjuje da se prijavi na instancu GitLaba, ali su svi podaci pod nejmspejsom tog korisnika i dalje dostupni, a komitovi potpisani mejl adresom tog korisnika i dalje imaju link do njegovog profila.
S druge strane, "uništavanje" korisnika u potpunosti briše korisnika iz baze podataka i sistema datoteka. Svi projekti i podaci u nejmspejsu tog korisnika biće obrisani, kao i sve grupe koje poseduje. Ovo je očigledno mnogo trajnija i destruktivnija operacija, pa se ređe koristi.
Grupe
GitLab grupa je skup projekata, zajedno sa podacima o tome kako korisnici mogu da pristupe tim projektima.
Svaka grupa ima svoj nejmspejs (kao što ga imaju i korisnici), tako da ako grupa training
ima projekat materials
, njegov URL je http://server/training/materials.
Svaka grupa je povezana sa određenim brojem korisnika, pri čemu svaki ima nivo dozvole za grupne projekte i za samu grupu. Ove dozvole se kreću od "gost" (pristup tiketima i četu) do "vlasnik" (potpuna kontrola nad grupom, njenim članovima i njenim projektima). Tipova dozvola ima previše da bi se ovde izlistali, ali GitLab ima koristan link na adminsitrativnom ekranu.
Projekti
GitLab projekat grubo odgovara jednom Git repozitorijumu. Svaki projekat pripada jednom nejmspejsu, bilo korisniku ili grupi. Ako projekat pripada korisniku, vlasnik projekta ima neposrednu kontrolu nad time ko ima pristup projektu; ako projekat pripada grupi, dozvole na nivou korisnika iz grupe će takođe imati uticaj.
Svaki projekat ima i nivo vidljivosti kojim se kontroliše ko ima pristup čitanja stranica i repozitorijuma tog projekta.
Ako je projekat Private, vlasnik projekta mora da eksplicitno dozvoli pristup određenim korisnicima.
Internal projekat je vidljiv svim prijavljenim korisnicima, a Public svima.
Obratite pažnju na to da ovo kontroliše i fetch
pristup, kao i pristup korisničkom interfejsu na vebu za taj projekat.
Hukovi
GitLab sadrži i podršku za hukove, kako na nivou projekta, tako i na nivou sistema. U oba slučaja, GitLab server će obaviti HTTP POST sa nekim deskriptivnim JSON-om kad god se dogodi relevantan događaj. Ovo je odličan način da povežete svoje Git repozitorijume i GitLab instancu na ostatak automatizacije svog toka razvoja, kao što su CI serveri, četovi ili alati za razvoj.
Osnovna upotreba
Pva stvar koju ćete želiti da uradite sa GitLabom jeste da kreirate novi projekat.
Ovo se jednosavno obavlja klikom na ikonicu +
iz trake sa alatima.
Pitaće vas za ime projekta, za nejmspejs kome treba da pripada, kao i za nivo vidljivosti koji želite da mu dodelite.
Većina onoga što ovde definišete nije trajno, i može se naknadno promeniti putem interfejsa za podešavanja.
Kliknite na Create project, i to je to.
Sad kad projekat postoji, verovatno ćeet želeti da ga povežete sa lokalnim Git repozitorijumom.
Svaki projekat je dostupan preko HTTPS-a ili SSH-a, i oba se mogu korsititi za konfigurisanje Git udaljenog repozitorijuma.
URL-ovi su vidljivi na vrhu naslovne stranice projekta.
Za već postojeće lokalne repozitorijume, ova komanda će kreirati udaljenu granu gitlab
i vezati je za željenu lokaciju.
$ git remote add gitlab https://server/namespace/project.git
Ako nemate lokalnu kopiju repozitorijuma, možete jednostavno da uradite sledeće:
$ git clone https://server/namespace/project.git
Veb korisnički interfejs nudi nekoliko korisnih pogleda na sam repozitorijum. Početna stranica svakog projekta pokazuje skorašnju aktivnost, a linkovi pri vrhu će vas odvesti do pogleda na datoteke projekta i zapisnik o pređašnjim komitovima.
Zajednički rad
Najjednostavniji način zajedničkog rada na GitLab projektu je davanje drugom korisniku dozovlu za guranje na Git repozitorijum. Možete dodati korisnika u projekat odlaskom u odeljak Members u podešvanjima tog projekta, i zatim povezati novog korisnika sa nivoom pristupa (o različitim nivoima pristupa više detalja u Grupe.) Ako korisniku date nivo pristupa Developer ili jače, taj korisnik će moći da gura komitove i grane direktno na repozitorijum.
Još jedan razdvojeniji način kolaboracije je pomoću zahteva za spajanjem.
Ovo svojstvo dozvoljava da korisnik koji samo vidi projekat kontribuira na način koji se može kontrolisati.
Korisnik sa direktnim pristupom mogu da jednostavno naprave granu, gurnu komitove na nju, i otvore zahtev za spajanjem iz njihove grane na granu master
ili na koju god drugu granu treba obaviti spoj.
Korisnici koji nemaju dozvolu za guranjem na repozitorijum mogu da ga "forkuju" (kreiraju svoju kopiju), gurnu komitove na tu kopiju, i otvore zahteva za spajanjem iz njihovog forka nazad na glavni projekat.
Ovaj model dozvoljava vlasniku da ima potpunu kontrolu nad time šta ide u repozitorijum i kada, a dopušta da projektu doprinesu i korisnici u koje nema poverenja.
Zahtevi za spajanjem i tiketi su glavne jedinice za dugoročne diskusije na GitLabu. Svaki zahtev za spajanjem dopušta da se zahtevana izmena iskomentariše linija po liniju, kao i generalnu diskusiju o celokupnoj promeni. Oba mogu da se dodele korisnicima, ili da se organizauju u prekretnice.
Ovaj odeljak se najviše usredsredio na GitLabove mogućnosti koje imaju veze s Gitom, ali kao zreli projekat, GitLab nudi i mnoge druge mogućnosti koje će vam pomoći u radu sa timom, kao što su projektni vikiji i alati za upravljanje sistemom. Jedna od prednosti GitLaba je to što, kada se server jednom podigne i pokrene, retko ćete morati da menjate konfiguracioni fajl ili da pristupate serveru preko SSH-a; većina administrativnih i opštih zadataka se mogu obaviti preko interfejsa iz brauzera.