Nastavení GIT repozitáře pro přístup přes HTTP
Pro školní projekt, který vypracováváme v týmu, se hodí mít systém pro správu verzí. Zvolili jsme program Git, jenž slibuje efektivní a přitom jednoduchou práci s repozitářem a je čím dál víc populárnější. Popíšu, jak jsem nastavoval Git na serveru, kde běží Debian.
Předpokladem k nastavení je nainstalovaný webový server Apache2 a program git-core. Dále je potřeba mít pravomoce na editaci konfiguračních souborů Apache, jeho restart příkazem (na Debianu)
$ /etc/init.d/apache2 restart
a práva měnit vlastníky souborů. Zkrátka a dobře je potřeba mít přístup k uživateli root, aby se dalo všechno správně a bezproblémů nastavit.
Krok první: vytvoření prázdného repozitáře Gitu
Nejprve je potřeba vytvořit složku, kde repozitář Gitu bude. Nejlepší je vytvořit ji v DocumentRootu složek webového serveru. Na Debianu DocumentRoot obvykle bývá ve /var/www, tedy vytvořím složku /var/www/mojerepo.git a v ní rovnou založím prázdný repozitář Gitu.
$ cd /var/www $ mkdir mojerepo.git $ cd mojerepo.git $ git --bare init # nebo git --bare init-db
Novým souborům, které Git vytvořil, je nutné nastavit příslušná přístupová práva tak, aby k nim Apache mohl bezproblémů přistupovat. Debian má pro Apache vyhrazeného uživatele www-data, takže mu stačí přisoudit vlastnictví složky mojerepo.git, včetně všech podsložek a souborů.
$ chown -R www-data:www-data .
Krok druhý: povolení DAV pro tuto složku
Co je to WebDAV? Jedná se o rozšíření HTTP protokolu pravidly, která dovolují více klientům přistupovat, vytvářet, mazat nebo jinak upravovat zdroje umístěné na serveru. Používá se například pro přístup k repozitářům programů pro správu verzí přes HTTP :)
S nainstalovaným Apache2 se zapnutí příslušných modulů webového serveru provede jedním příkazem
$ a2enmod dav dav_fs
Následnou konfiguraci zapíši do nového konfiguračního souboru git.conf ve složce /etc/apache2/conf.d, ale stejně tak se může zapsat přímo do souboru /etc/apache2/httpd.conf.
<Location /mojerepo.git> DAV On AuthType Basic AuthName "Git" AuthUserFile /etc/apache2/passwd.git Require valid-user </Location>
V konfiguračním souboru se ale odkazujeme na soubor /etc/apache2/passwd.git a ten ještě neexistuje. K jeho vytvoření slouží utilita htpasswd. Vytvoření souboru s heslem je pomocí ní lehké, například příkazem
$ htpasswd -c /etc/apache2/passwd.git jmeno_uzivatele
Po jeho spuštění jsem vyzván k zadání hesla. Přepínač -c znamená, že se vytvoří nový soubor. Pokud chci uživatele jen přidat, přepínač vynechám.
Nyní stačí restartovat Apache
$ /etc/init.d/apache2 restart
a zkontrolovat umístění repozitáře na příslušné HTTP adrese a s příslušnými přihlašovacími údaji.
Krok třetí: nastavení klienta
Nejprve si klient musí vytvořit místní repozitář Gitu nebo si nějaký naklonovat. Klient zkrátka musí mít něco, s čím se dá pracovat, takže pokud to nemáte, opakujte první krok i na straně klienta.
Já místní repozitář už mám a můžu programu Git říct, kde je jeho vzdálený protějšek. Git na to má vlastní příkaz (pozor na / na konci)
$ git config remote.origin.url http://<uzivatel>:<heslo>@<adresa_serveru>/mojerepo.git/
Hned můžu udělat svůj první commit podobným příkazem
$ git push http : //<uzivatel>:<heslo>@<adresa_serveru>/mojerepo.git/ --all
Při dalších commitech už za push nemusím nic dávat, takže jednoduše git push.
Zde ale pozor. Možná Vám to půjde, možná ne a záleží to na verzi Git, kterou používáte. Git verze 1.5.6 a 1.6.0 neumí zapisovat (push) na http repozitáře serveru. Verze 1.6.1 a vyšší jsou v pořádku. Chybová hláška, kterou dostanete je
Unable to create branch path <http_adresa>/repo.git/info Error: cannot lock existing info/refs error: failed to push some refs to '<http_adresa>/repo.git'
Stejný problém jsem řešil i já a pomohlo mi vytvoření souboru .netrc ve svém domovském adresáři. Struktura souboru je jednoduchá
machine <adresa_serveru> login <jmeno_uzivatele> password <heslo_uzivatele>
Protože zde ukládám svoje heslo, nastavím souboru práva jen pro vlastní přístup příkazem
$ chmod 600 ~/.netrc
A je to. Commit provádím úplně stejně příkazem
$ git push origin
Snad Vám postup pomůže k bezproblémovému nastavení programu Git na serveru a zpřístupnění jeho repozitářů přes HTTP rozhraní. Mohou se vyskytnout ještě další problémy, ale s těmi pomůže Google :)