Git e Gitosis

Ecco come creare un repository git e condividerlo con gitosis su ubuntu 9.04.

Installare git

sudo apt-get install git-core python-setuptools

Installare gitosis

cd /tmp
git clone git://eagain.net/gitosis.git

cd gitosis
python setup.py install

Gitosis è un modo “semplificato” – si fa per dire – per gestire gli accessi al repository git e consiste nel modificare un file di configurazione con una serie di autorizzazioni e di chiavi pubbliche ssh associata ad ogni utente.

Prima di poter utilizzare gitosis va creato un utente ad hoc e configurato come amministratore di gitosis. L’utente che andiamo a creare molto originariamente si chiamerà git.


sudo adduser \
--system \
--shell /bin/sh \
--gecos 'git version control' \
--group \
--disabled-password \
--home /home/git \
git

l’utente appena creato avrà come unico compito di “ospitare” il repository e di far girare gitosis. Quindi i repository saranno almeno due

  • il repository in cui vogliamo mettere i nostri dati da versionare (può essere più di uno)
  • il repository amministrativo di gitosis che si chiama gitosis-admin

a questo punto bisogna fornire l’accesso al repository amministrativo ad un utente del sistema utilizzato per sviluppare (chiamiamolo valerio)
occorre quindi recuperare la chiave pubblica dell’utente valerio da ~/.ssh/id_rsa.pub ma se non è presente va creata con



ssh-keygen -t rsa

e importata nel repository amministrativo gitosis-admin con


sudo -H -u git gitosis-init < ~/.ssh/id_rsa.pub

il quale confermerà con un


Initialized empty Git repository in ./
Initialized empty Git repository in ./

si lo dirà 2 volte.

Bisogna aggiornare alcuni permessi poichè gitosis li imposta in maniera non corretta


sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

A questo punto il repository amministrativo è pronto e lo si può accedere ovviamente utilizzando git con

git clone git@localhost:gitosis-admin.git

verrà creata una sandbox con il file e la directory

-rw-r–r– 1 valerio valerio 142 2009-07-04 17:31 gitosis.conf
drwxr-xr-x 2 valerio valerio 80 2009-07-04 17:31 keydir

gitosis.conf contiene la configurazione degli utenti mentre keydir contiene le chiavi pubbliche di tutti gli utenti (compresa già quella di valerio che è stata passata precedentemente con il comando sudo -H -u git gitosis-init < ~/.ssh/id_rsa.pub )

gitosis.conf contiene le seguenti voci

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = valerio@ken

il che significa che attualmente il repository gitosis-admin è accedibile da valerio dalla macchina ken utilizzando la chiave pubblica valerio@ken che è in

ls -l keydir/
-rw-r–r– 1 valerio valerio 393 2009-07-04 17:31 valerio@ken.pub

A questo punto l’installazione è conclusa anche se ovviamente dovrebbero essere aggiunti i repository su cui si vuole versionare il proprio codice. Supponendo di voler creare un repository chiamato personale gitosis.conf assumerà l’aspetto

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = valerio@ken

[group team]
writable = personale
members = valerio@ken

dopodichè va fatto il commit ed il push di queste modifiche

git commit -m “new personal repository” -a
git push

a questo punto l’utente valerio@ken è in grado di creare il repository personale con

cd /tmp
mkdir personale
cd personale/
git init
git remote add origin git@localhost:personale.git
echo “il mattino ha l’oro in bocca” > readme.txt
git add readme.txt
git commit -m “primo file”
git push origin master

e il repository personale adesso è accessibile con

git clone git@localhost:personale.git

Utenti multipli

Ovviamente è possibile utilizzare utenti multipli per un singolo repository aggiungendo vari utenti alla configurazione
[group team]
writable = personale
members = vcrini@vcrini-laptop valerio@ken

qui il repository mysite è scrivibile da vcrini e valerio. In keydir va copiata a mano la chiave pubblica vcrini@vcrini-laptop.pub

Volete debuggare?


Aggiungere “loglevel = DEBUG” proprio sotto la voce [gitosis] e fate attenzione agli spazi altrimenti non funziona.

[gitosis]
loglevel = DEBUG

[group gitosis-admin]
writable = gitosis-admin
…

Maggiori informazioni?
C’è un ottimo tutorial su Git qui.

Questa voce è stata pubblicata in git, repository. Contrassegna il permalink.