Gitosis

Git sam w sobie nie oferuje możliwości zarządzania użytkownikami i przydzielania im uprawnień do repozytoriów. Jeżeli potrzebujesz takiej funkcjonalności musisz skorzystać z dodatkowych rozwiązań. Przykładem takiego rozwiązania jest Gitosis. Idea jest taka, że na koncie jest repo gitosis-admin w którym trzymany będzie plik konfiguracyjny, lista użytkowników i ich klucze SSH. Zarządzasz konfiguracją poprzez pushowanie kolejnych zmian w repo. Kopię roboczą repo możesz trzymać na swoim desktopie, koncie u nas lub na innym serwerze. Poniżej opis instalacji Gitosisa. Opis nie zastąpi zapoznania się z dokumentacją projektu.

Zaloguj się na swoje konto przez SSH, pobierz źródła Gitosisa i zainstaluj go na koncie

maupa@vk1041:~$ git clone git://eagain.net/gitosis.git
maupa@vk1041:~$ cd gitosis
maupa@vk1041:~/gitosis python setup.py install --prefix=$HOME/.python

Wygeneruj klucz SSH dla hosta z którego będziesz zarządzał Gitosisem

ssh-keygen

Klucz publiczny umieść na koncie np. w pliku $HOME/klucz.pub. Uruchom polecenie gitosis-init ($HOME/.python/bin/gitosis-init), które założy repo administracyjne i skonfiguruje dostęp po kluczu. 

maupa@vk1041:~/gitosis$ gitosis-init < ../klucz.pub

W tym momencie na Twoim koncie pojawił się katalog $HOME/repositories a do $HOME/.ssh/authorized_keys został dodany klucz publiczny.

Uwaga: Połączenie po tym kluczu ograniczone jest do wywołania polecenia gitosis-serve i korzystając z niego nie połączysz się do shella.

Zmiany na koncie wykonywane są dzięki post-update hookom, upewnij się, że skrypt post-update jest wykonywalny

maupa@vk1041:~$ chmod u+x repositories/gitosis-admin.git/hooks/post-update

Sklonuj repozytorium gitosis-admin na swój komputer lub inne konto

megi@uuk:~$ git clone maupa@maupa.megiteam.pl:gitosis-admin.git

(podstaw oczywiście swoje dane do logowania ;)

megi@uuk:~$ cd gitosis-admin

Dodawanie nowego użytkownika sprowadza się do skopiowania jego klucza publicznego do katalogu keydir i przypisana go do grupy lub repo w gitosis.conf. Plik z kluczem musi mieć nazwą user.pub np. jas.pub. Po skopiowaniu klucza wykonaj:

git add keydir/jas.pub

Wyedytuj gitosis.conf i dodaj użytkownika do istniejącej grupy lub utwórz nową. 

[group nasza-grupa]
members = jas

Jeżeli tworzysz nową określ do jakiego repozytorium ma uprawnienia

writable = nasze-repo

Zacommituj zmiany i wypchnij na serwer

git commit -a
git push

Na serwerze pojawi się nowy wpis w $HOME/.ssh/authorized_keys. Jeżeli się nie pojawił sprawdź czy skrypt $HOME/repositories/gitosis-admin.git/hooks/post-update jest wykonywalny.

Jak utworzyć nowe repo?

Najpierw w gitosis.conf stwórz grupę, która będzie miała uprawnienia do tego repo lub dopisz je do istniejącej grupy. Zacommituj zmiany i zrób push. Następnie utwórz repozytoriom lokalnie 

megi@uuk:~$ mkdir nowe-repo
megi@uuk:~$ cd nowe-repo
megi@uuk:~/nowe-repo$ git init
megi@uuk:~/nowe-repo$ git remote add origin maupa@maupa.megiteam.pl:nowe-repo.git

(dodaj jakieś pliki, zacommituj)

megi@uuk:~/nowe-repo$ git push origin master:refs/heads/master

Nowe repozytorium powinno pojawić się w $HOME/repositories na serwerze.