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.