Git
Chapters ▾ 2nd Edition

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.

GitWeb korisnički interfejs baziran na vebu.
Figure 49. GitWeb korisnički interfejs baziran na vebu.

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.

.Ekran za prijavu Bitnamijeve GitLab virtuelne mašine.
Figure 50. Ekran za prijavu Bitnamijeve GitLab virtuelne mašine.

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.

._Admin area_ u meniju GitLaba.
Figure 51. Admin area u meniju GitLaba.

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.

Administracioni ekran GitLab korisnika.
Figure 52. Administracioni ekran GitLab korisnika.

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.

Administracioni ekran za GitLab grupe.
Figure 53. Administracioni ekran za GitLab grupe.

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.