Ú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ím, druhé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.