Správa linuxového serveru: Pokročilejší nasazení Gitu

Minulý díl se věnoval představení SCM nástroje Git a vytvoření centrálního úložiště na vlastním serveru. Řešení představené minule bylo to nejjednodušší možné. V tomto dílu zmíním jeden tip pro efektivnější používání Gitu, dále vám ukážu, jak repozitáře zveřejnit pro read-only přístup, a nakonec vám povím, jak obsah repozitářů prohlížet přes webové rozhraní.

Úvod

Pokud přicházíte poprvé k problematice SCM nástrojů, tedy nástrojů pro správu verzí, měli byste si nejprve přečíst minulý díl, kde byl Git představen.

Základy práce s Gitem: Ignorování souborů

Git není navržen k verzování jednoho jediného souboru. Verzuje se vždy celý adresář a o veškerých souborech, které v něm existují, ale nejsou verzovány, dostanete hlášení po každém „git status“:

# On branch master
# Changed but not updated:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#       modified:   prace.txt
#
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#       prace.txt~
no changes added to commit (use "git add" and/or "git commit -a")

Tyto soubory mohou představovat dočasné soubory, záložní kopie editoru (jako prace.txt~ v příkladu výše), logy, zkrátka vše, co sice v adresáři zůstane, ale v repozitáři to nechcete. Abyste udržovali výpis čistý a přehledný, je vhodné Gitu říci, které typy souborů má ignorovat. Ty se pak ve výpisu změn nebudou zobrazovat

Řešení jsou dvě. Obě zahrnují soubor s definicí vzorů jmen souborů, které se mají ignorovat, např.:

*~
*.pdf
!zachovat.pdf
*.aux
*.[ab]

Příklad obsahu souboru by měl být samovysvětlující. Nebudou se brát v úvahu soubory se jmény končící na ~, dále všechny PDF soubory s výjimkou souboru zachovat.pdf, který ignorován nebude, dále všechny soubory .aux a všechny soubory s příponami .a nebo .b.

Tento soubor je třeba vhodně pojmenovat a umístit. Pokud chcete, aby byl součástí repozitáře (a verzoval se taky), vytvořte v příslušném adresáři soubor .gitignore. Chcete-li tyto vzory držet mimo repozitář, využijte soubor .git/info/exclude (cesta je relativní ke kořenovému adresáři repozitáře).

Veřejný read-only přístup k repozitáři pomocí Git démona

Jednou z možností, jak zpřístupnit veřejnosti Git repozitář pro read-only přístup (tedy pro klonování repozitáře a běžnou synchronizaci, nikoliv však pro zápis), je využít samotného Git démona a přistupovat k repozitáři prostřednictvím Git protokolu. V Debianu je třeba za tímto účelem nainstalovat balíček git-daemon:

aptitude install git-daemon

Git démon v Debianu pracuje s repozitáři umístěnými ve /var/cache/git, kde je samozřejmě nejspíše nemáte. Je tedy třeba si dopomoci symbolickými odkazy. Dávám zde k dispozici dva příklady podle typu umístění repozitáře, vyberte si ten, který odpovídá vašemu repozitáři:

ln -s /cesta/k/repositar/.git /var/cache/git/repositar.git
ln -s /cesta/k/repositar.git /var/cache/git/repositar.git

Pokud se v tuto chvíli pokusíte repozitář naklonovat, obdržíte suchou chybovou hlášku:

fatal: The remote end hung up unexpectedly

Kdybyste někdy řešili problém, proč se toto děje, podívejte se na server do /var/log/git-daemon/current, dozvíte se konkrétní příčinu. V tomto případě ohlásí Git chybu „repository not exported“, což znamená, že danému repozitáři nebyl povolen export Git démonem. Proto je třeba ještě vytvořit následující soubor, kterým export povolíte:

touch /var/cache/git/repositar.git/git-daemon-export-ok

Repozitář pak můžete naklonovat tímto způsobem:

git clone git://server.example.org/repo.git

Prohlížení Git repozitáře online pomocí nástroje Gitweb

Gitweb je nástroj pro prohlížení Git repozitářů prostřednictvím webového prohlížeče. Můžete si procházet historii, stahovat snapshoty, prohlížet změny atd., a samozřejmě to také umožnit návštěvníkům vašeho webu. Nástroj si můžete prohlédnout v akci na git.kernel.org, na některém z repozitářů obsahujícím linuxové jádro.

Instalace Gitwebu je poměrně jednoduchá, stačí nainstalovat příslušný balíček:

aptitude install gitweb

Máte-li nainstalovaný webový server Apache, Gitweb by měl začít fungovat okamžitě – vytvoří se alias /gitweb, tudíž zadejte URL následujícího typu: http://server.example.org/gitweb. Konfiguraci Gitwebu naleznete v /etc/apache2/conf.d/gitweb. Pokud tedy chcete změnit daný alias nebo si Gitweb zpřístupnit jen na určitém virtuálním serveru (virtual host), soubor upravte nebo přesuňte jinam a jeho obsah vložte tam, kde ho mít chcete. Připomínám, že webovému serveru Apache jsem se v tomto seriálu již věnoval, a sice ve třech dílech (v prvnímdruhém a třetím).

Používáte-li jiný webový server, budete muset upravit jeho nastavení pro Gitweb. Aplikaci Gitweb naleznete v /usr/share/gitweb, je napsaná v Perlu a patrně budete využívat CGI nebo FastCGI. Návod pro zprovoznění Gitwebu pomocí webového serveru Nginx naleznete v odkazech pod článkem.

Gitweb má konfigurační soubor umístěný v /etc/gitweb.conf, je poměrně strohý, ale přesto obsahuje pár věcí, které můžete chtít změnit, jako logo, odkaz na každé stránce (vedoucí třeba zpět na váš web) atd.

Pokud jste svoje repozitáře nepojmenovali, asi vás příliš neuspokojí pohled na popisek „Unnamed repository; edit this file 'description' to name the repository.“, zde stačí udělat přesně to, co popisek říká, upravit soubor .git/description v daném repozitáři.

Musím vás upozornit ještě na jednu věc. Zatímco Git démon vyžaduje výše zmíněný git-daemon-export-ok, Gitweb zpřístupní vše, co se nachází v nastaveném adresáři (výchozí je /var/cache/git), bez ohledu na tuto značku. Chcete-li upravit, které repozitáře bude Gitweb zpřístupňovat a které ne, máte dvě možnosti. Buď v /etc/gitweb.conf změníte proměnnou $projectroot na nějaký jiný adresář, a do něj vložíte příslušné symbolické odkazy těch repozitářů, které zveřejnit chcete. Nebo vytvoříte seznam projektů, což je soubor obsahující položky ve formátu cesta_k_projektu vlastnik@example.com a cestu k tomuto souboru vložíte jako hodnotu proměnné $projects_list v /etc/gitweb.conf, takto:

$projects_list = "/var/cache/git/projekty.txt";

Soubor s projekty (repozitáři) může mít následující obsah:

repositar1.git vlastnik1@example.org
repositar2.git vlastnik2@example.org

Cesta k repozitářům může být relativní nebo absolutní, v příkladu výše je cesta relativní (resp. cesta vypadá neuvedená, jelikož soubor se seznamem projektů je ve stejném adresáři jako repozitáře).

Tím bych tento díl ukončil. Příště vám představím řešení centrálního repozitáře s jemnějším systémem oprávnění než „plný přístup nebo žádný přístup“, které bylo prezentováno v minulém díle.