Věřím, že většina z nás se už v praxi setkala s nějakým systémem pro správu repozitářů. Takovéto systémy jsou velmi výhodné jak pro týmy lidí pracujících dohromady, tak i pro jednotlivce. Získáte jednodouchou možnost vrátit se k dřívejším verzím svého programu (pokud třeba něco pokazíte, je mnohdy lepší vrátit se zpět, než napravovat vzniklé chyby). Já jsem zvolil git a díky vlastnímu linux serveru si mohu vytvářet vlastní repozitáře, které jsou umístěny mimo můj počítač, tudíž je to i jakási záloha mé práce.
V tomto článku nastítím, jak probíhá instalace git serveru a vytváření vlastních repozitářů.
Instalace git serveru
Nejprve na linuxovém serveru nainstalujeme gitosis – software pro hostování git repozitářů. K tomu budeme potřebovat git a python, abychom mohli zdrojové kódy pomocí gitu stáhnout a pomocí pythonu je nainstalovat.
(Git nainstalujeme příkazem: sudo apt-get install git-core
)
Stáhneme tedy nejnovější verzi gitosis
git clone git://eagain.net/gitosis.git
a nainstalujeme jej:
cd gitosis
sudo python setup.py install
Pokud při instalaci dostaneme chybu:
Traceback (most recent call last):
File "setup.py", line 2, in
from setuptools import setup, find_packages
ImportError: No module named setuptools
je třeba doinstalovat ještě python setuptools: sudo apt-get install python-setuptools
Vytvoření uživatele git
Nyní je potřeba vytvořit uživatele, který se o repozitáře bude starat. Přidáme tedy uživatele git
, který bude mít domovský adresář ve /var/git
.
sudo adduser \
--system \
--shell /bin/sh \
--gecos 'git version control' \
--group \
--disabled-password \
--home /var/git \
git
Zinicializování uložiště pro repozitáře
Pro read-write přístup do repozitářů přes ssh potřebujeme ověření pomocí RSA klíče. Vytvoříme si tedy svůj klíč na domácím počítači a nahrajeme jej na server, kde běží gitosis. Pomocí tohoto klíče následně zinicializujeme základní uložiště pro naše budoucí repozitáře.
ssh-keygen -t rsa
Klíč se vytvoří v adresáři ~/.ssh/id_rsa.pub
, zkopírujeme jej (ale musí zůstat i v .ssh/
) například pomocí scp na git server a uložíme jako /tmp/id_rsa.pub
A zinicializujeme repozitáře:
sudo -H -u git gitosis-init
při úspěchu dostaneme výpis podobný následujícímu:
Initialized empty Git repository in /var/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /var/git/repositories/gitosis-admin.git/
Nyní je vše připraveno a můžeme začít přidávat nové repozitáře a k nim jejich uživatele.
Ještě se ujistíme, že post-update hook má práva na spouštění, pokud ne, přidáme tyto práva příkazem:
sudo chmod a+x /var/git/repositories/gitosis-admin.git/hooks/post-update
Vytváření vlastních repozitářů
Nyní se můžeme odhlásit z SSH přistupu a náš repozitářový server ovládat vzdáleně. Jediné, co je potřeba, je stáhnout gitosis-admin
repozitář, který se vytvořil při inicializaci. Předpokládejme, že náš server běží na IP adrese 192.168.0.100:
git clone git@192.168.0.100:gitosis-admin.git
V repozitáři je soubor gitosis.conf
sloužící ke konfiguraci repozitářů, uživatelů a spousty dalšího. A složka keydir
, kde jsou rsa klíče pro uživatele mající přístup k repozitářům. V současné době je zde jediný klíč a to ten, který jsme o pár řádků výše vygenerovali.
Pro přidání repozitáře si vytvoříme novou skupinu (foo), definujeme názvy repozitářů patřící do skupiny (položka writable) a uživatele, mající přístup ke všem repozitářům této skupiny (members).
[group foo]
writable = foorepo
members = ibru
Nyní je náš git server připraven pro repozitář s názvem foorepo
. Vytvoříme tedy na našem lokálním počítači složku nebo můžeme přejít do složky s existujícími zdrojovými (nebo jakýmikoliv jinými) kódy. Nový repozitář vytvoříme sérií přikazů:
cd path/to/sources
git init
git remote add origin git@192.168.0.100:foorepo.git
# uděláme úpravy
git add .
git commit -a -m "inicializace repozitare"
git push origin master:refs/heads/master
Nyní je repozitář zcela hotov a můžeme k němu přistoupit pomocí
git clone git@192.168.0.100:foorepo.git
Přidávání uživatelů
Přidat nové uživatele je velmi jednoduché, stačí v konfiguračním souboru pro danou skupinu přidat jméno do řádku s „members = …“ a do adresáře keydir
přidat klíč vygenerovaný na počítači nového uživatele. Název souboru s klíčem je <jméno>.pub. Uživatel však svůj vygenerovaný klíč musí nechat i ve složce ~/.ssh/
.
Můžeme tedy například přidat uživatele petr, který bude mít také právo přistupovat k repozitářům ve skupině foo:
[group foo]
writable = foorepo
members = ibru petr
a zkopírujeme klíč petr.pub
do adresáře keydir
Nyní všechny změny commitneme na server:
git add keydir/petr.pub
git commit -a -m "pridani uzivatele petr do skupiny foo"
git push
Od této chvíle by užvatel petr měl být schopen ze svého počítače stáhnout repozitáře pomocí:
git clone git@192.168.0.100:foorepo.git
Další užitečná nastavení
V git serveru je možné nastavit ještě spoustu dalších možností. Jako například povolení read-only stáhnutí repozitářů i uživatelům, kteří nemají své rsa klíče na serveru. Případně webové rozhraní pro repozitáře. Toto nastavení už můj článek nezahrnuje, pro zájemce mohu dodporučit následující zdroje:
- gitosis readme – sekce git-daemon a gitweb
- Hosting Git repositories, The Easy (and Secure) Way – zde jsem čerpal já hlavní inspiraci pro tento článek