Vytvoriť GIT server pomocou démona git-daemon, ktorý je obsiahnutý v balíčku git-core je naozaj jednoduché avšak má veľa nedostatkov čo sa týka funkcionality. Jednoznačne najväčšími nedostatkami je možnosť autentifikovať používateľov a vytvárať takzvané hooky, ktoré su dobre známe z SVNka a dajú sa veľmi dobre využívať pri rôznych development workflowoch. Preto som začal používať gitolite, ktorý obsahuje všetky chýbajúce fičúrky a k tomu je jednoducho konfigurovateľný.
Strana servera
V rýchlosti si môžeme nainštalovať balíček gitolite pomocou starých známych príkazov. Samozrejme pracujeme na Debian 6. Pokiaľ správne viem v Debian 5 tento balíček nebol obsiahnutý a používal sa v dnešnej dobe už deprecated gitosis.
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install gitolite
Po tomto sa automatický vytvorí používateľ gitolite, ktorého neskôr použíjeme na konfiguráciu. Ďalším krokom bude nakopírovať náš verejný ssh kľuč do adresára /tmp ak takýto kľúč nemáme vieme si ho jednoducho vytvoriť pomocou príkazu ssh-keygen alebo si len prekopírujeme už existujúce kľuče z nášho lokálneho systému.
$ cd ~/.ssh $ ls -al total 20 drwx------ 2 lukas lukas 4096 Aug 20 11:09 . drwxr-xr-x 11 lukas lukas 4096 Aug 20 11:09 .. -rw-r--r-- 1 lukas lukas 1671 Aug 20 11:09 id_rsa # PRIVATNY KLUC -rw-r--r-- 1 lukas lukas 402 Aug 20 11:09 id_rsa.pub # VEREJNY KLUC -rw-r--r-- 1 lukas lukas 3536 Jul 26 14:31 known_hosts
Ak máme kľuč na svojom mieste je vhodné si ho aj nejak slušne premenovať napríklad na lukas.pub a nastaviť mu správne práva, aby ho vedeli používatelia prečítať(v našom prípade používateľ gitolite). Potom sa len prepneme na správcu repozitárov gitolite, spustíme konfigurátor s parametrom na náš verejný kľuč a je hotovo.
# Prekopirujeme si verejny kluc do docasneho adresara $ cp ~/.ssh/id_rsa.pub /tmp/lukas.pub # Nastavime prava tak aby si kazdy vedel precitat nas kluc $ chmod 0666 /tmp/lukas.pub # Prepnem sa na spravcu repozitarov $ sudo su gitolite # Spustime konfiguraciu $ gl-setup /tmp/lukas.pub # Poupratujeme za sebou $ exit $ rm /tmp/lukas.pub
Čo sa týka konfigurácie na strane servera už nie je nutné nič robiť, všetko podstatné sa už bude diať na strane klienta.
Strana klienta
Konfigurácia používateľov a repozitárov sa deje na strane klienta(teda môžme aj na strane servera, ale príde mi jednoduchšie s tým pracovať lokálne). Celá finta spočíva v tom, že gitolite si drží konfigurácie vo vlastnom repozitáry gitolite-admin, ktorý si vieme naklonovať lokálne a ďalej s ním pracovať. Ešte spomeniem ak by repozitár nešiel naklonovať tak chyba je určíte v tom, že kĺúče sa v ropozitáry gitolite-admin a lokálnej verzii umiestnenej v adresáry ~/.ssh nezhodujú.
$ git clone gitolite@server:gitolite-admin Cloning into gitolite-admin... remote: Counting objects: 6, done. remote: Compressing objects: 100% (4/4), done. remote: Total 6 (delta 0), reused 0 (delta 0) Receiving objects: 100% (6/6), done.
Teraz si vieme vpohode pridávať používateľov a repozitáre stačí len vojsť do adresáta gitolite-admin/keydir a nakopírovať tam verejné kľuče používateľov, ktorý nám oni samotní dodajú a potom v súbore gitolite-admin/conf/gitolite.conf nastaviť oprávnenia jednotlivých používaťelov ku repozitárom. V súbore gitolite.conf nám stačí pozrieť predvolené nastavenia, ktoré sú samovysvetľujúce.
$ cp cesta/ku/klucu/pouzivatela.pub keydir/ $ git add keydir/pouzivatela.pub $ git commit -a -m "pridany novy pouzivatel" $ git push
Ako vyzerá predvolený gitolite-admin/conf/gitolite.conf
repo gitolite-admin
RW+ = lukas
repo testing
RW+ = @all