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í.

Nezapomeňte, že pro správné fungování je potřeba, aby tyto soubory byly čitelné pro uživatele apachefi nebo pro ostatní, viz uživatelské HTML stránky.

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.

K takovémuto repozitáři je pak možné přistoupit pomocí některého z těchto příkazů.

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

# u některých starších verzí gitu (1.7.x) je nutné použít způsob
# s uvedeným přihlašovacím jménem:
nekde$ git clone https://jmeno@www.fi.muni.cz/~xpepa/nejakyprojekt.git
Password:
...

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.