Tento dokument popisuje lokální prostředky, které jsou na fakultních počítačích k dispozici pro podporu práce s verzovacím systémem Git. O samotném systému Git se lze dočíst více například v oficiálním tutoriálu, případně v knize Pro Git, resp. v jejím českém překladu. Následující dokument není návodem ke Gitu, jen k jeho použití v prostředí sítě FI MU.

Zveřejnění svého repozitáře

Git je distribuovaný verzovací systém, což znamená, že v jednu chvíli může existovat více repozitářů jednoho projektu (například od více vývojářů), a mezi těmito repozitáři lze rozesílat, případně přijímat jednotlivé změny (commity).

Struktura repozitáře Gitu je navržena tak, že pro jeho čtení není potřeba žádného zvláštního protokolu - stačí například protokolem HTTP zveřejnit repozitář jako běžný adresář (na počítačích FI tedy mít jej pod adresářem public_html ve svém domovském adresáři - viz dokument o uživatelských WWW stránkách). Pokud tedy například mám již existující projekt v repozitáři /home/xpepa/nejakyprojekt, můžu zveřejnit jeho klon takto:

aisa$ mkdir -p /home/xpepa/public_html/git
aisa$ cd /home/xpepa/public_html/git
aisa$ git clone --bare /home/xpepa/nejakyprojekt nejakyprojekt.git
Cloning into bare repository 'nejakyprojekt.git'...
done.
aisa$ cd nejakyprojekt.git
aisa$ cp hooks/post-update.sample hooks/post-update
aisa$ ./hooks/post-update

Poznámka: tzv. bare repozitáře se vždy vytvářejí v adresáři s koncovkou .git.

Typografická poznámka: kurzívou jsou v příkladech označeny ty části, které jsou závislé na konkrétním uživateli a tom, jaké pojmenování projektu a další vlastnosti se rozhodne použít. Při jejich aplikaci změňte tyto části způsobem, odpovídajícím vašemu prostředí.

V tomto okamžiku je už veřejný klon repozitáře dostupný, a lze jeho existenci oznámit dalším uživatelům s tím, že je dostupný pod URL https://www.fi.muni.cz/~xpepa/git/nejakyprojekt.git. Jiný uživatel si tedy může například stáhnout vaše změny do svého repozitáře příkazem git fetch, případně git pull, anebo dokonce vytvořit klon vašeho repozitáře následujícím příkazem:

nekde$ git clone https://www.fi.muni.cz/~xpepa/nejakyprojekt.git
Cloning into 'nejakyprojekt'...
done.

Omezení přístupu

Výše uvedeným postupem jsme vytvořili veřejný klon vašeho repozitáře. Na repozitář zatím nevede žádný odkaz, takže jej budou mít k dispozici jen ti, kterým to explicitně sdělíte. Pro případ uhodnutí URL (což není nijak nepravděpodobné) je ale možnost zabezpečit adresář autentizací například jménem a heslem. Protože zveřejněný repozitář je vlastně jen adresář uvnitř vašeho WWW stromu, lze použít standardní postup pro autentizovaný přístup k uživatelským WWW stránkám.

Aktualizace veřejného repozitáře

Pokud ve svém pracovním repozitáři uděláme další změny (commity), lze tyto zveřejnit jejich přeposláním do veřejného repozitáře příkazem git push:

aisa$ cd /home/xpepa/nejakyprojekt
aisa$ vi nejakysoubor.txt # provedeme změnu
aisa$ git commit -m 'Uprava nejakeho souboru' nejakysoubor.txt
aisa$ git push /home/xpepa/public_html/git/nejakyprojekt.git # zveřejníme
...
To .../nejakyprojekt.git/
   e413f46..b652329 master -> master

Gitweb: webové rozhraní k repozitáři Gitu

Repozitář zveřejněný protokolem HTTP výše popsaným způsobem je sice čitelný pro různé Git klienty, ale ne pro člověka. Pokud chcete, aby obsah repozitáře byl i lidsky čitelný včetně verzovacích informací (datum poslední změny, seznam změn, seznam větví, rozdíly mezi verzemi, obsah určitého souboru v dané nebo poslední verzi, atd.), můžete použít například nástroj Gitweb. Tento nástroj je nainstalovaný na počítači Aisa a stačí jen výpis adresářů http://www.fi.muni.cz/~xpepa/git/ a http://www.fi.muni.cz/~xpepa/git/nejakyprojekt.git/ přesměrovat na Gitweb. Přístup Git klientů zůstane zachován, protože ti nikdy výpis adresáře nepoužívají. Repozitář pak je přístupný pod stejným URL jak lidem, tak i programovým klientům.

Pro použití Gitwebu stačí do adresáře ve kterém máte své veřejné repozitáře (například /home/xpepa/public_html/git z výše uvedených příkladů) umístit soubor jménem .htaccess (pozor, tečka na začátku) s následujícím obsahem:

# obsah souboru /home/xpepa/public_html/git/.htaccess:
Options -Indexes
RewriteEngine On
RewriteRule ^$ /git/gitweb.cgi/%{REQUEST_FILENAME} [L,PT]
RedirectMatch permanent ^(/~xpepa/git/)([a-z0-9_/-]*[a-z0-9_-])\.git/$ $1?p=$2.git

Webové rozhraní ke Gitu si lze vyzkoušet například na adrese http://www.fi.muni.cz/~kas/git/.

Jeden repozitář pro více uživatelů

V centralizovaných verzovacích systémech (CVS, Subversion) je jediný možný přístup takový, že existuje jeden centrální repozitář, do kterého všichni vývojáři promítají svoje změny. Git podporuje různé přístupy (některé z nich jsou popsány v manuálové stránce gitworkflows(7)). Jeden z častých přístupů je, že projekt má jednoho správce, kterému ostatní nabízejí svoje změny ze svých veřejných repozitářů, on si je podle svého uvážení shromažďuje do svého repozitáře, a na základě nich pak publikuje svůj repozitář jako "oficiální verzi" projektu.

Centralizovaný přístup je nicméně možný i v Gitu. K jeho použití je však potřeba mít sdílený adresář, zapisovatelný všemi oprávněnými uživateli. Podpora tohoto přístupu na strojích FI je plánována do budoucna. Funkce a nastavování přístupových práv bude podobné, jako na fakultním Subversion serveru.