Git est un logiciel de gestion de versions décentralisé. C'est un logiciel libre créé par Linus Torvalds, le créateur du noyau Linux, et distribué sous la GNU GPL version 2.
L'objectif de ce tutoriel est de mettre en place rapidement et simplement un serveur git décentralisé. Nous aurons la possibilité de :
Enfin nous verrons l'intégration de notre serveur avec redmine.
C'est la partie la plus simple de ce tuto :
aptitude install git-core
Comme d'habitude on ne travaille (ou fais travailler) jamais en root. Les dépôts devront donc appartenir à un utilisateur non privilégié (en l'occurrence l'utilisateur sera git mais cela pourrais être n'importe quoi d'autre)
sudo adduser git sudo passwd git
La génération d'une clé ssh se fait de la manière suivante (PAS SUR LE SERVEUR MAIS SUR VOTRE POSTE DE TRAVAIL):
ssh-keygen -t rsa
Dans votre répertoire home se trouve un répertoire .ssh et à l'intérieur se trouve votre clé publique et votre clé privé. Il va falloir envoyer votre clé publique sur le serveur git (ET UNIQUEMENT LA CLE PUBLIQUE!!!).
cd ~/.ssh scp id_rsa.pub user@votreserveur:/tmp
mkdir ~/sources cd ~/sources git clone git://eagain.net/gitosis
sudo apt-get install python-setuptools
python setup.py install
Voila gitosis est maintenant installé.
Nous allons initialiser gitosis dans le répertoire de l'utilisateur git et autoriser l'administration au possesseur de la clé publique.
sudo su - git cd ~/git gitosis-init < /tmp/id_rsa.pub
la réponse a gitosis-init doit être :
Initialized empty Git repository in ./ Initialized empty Git repository in ./
on obtient donc l'arborescence suivante :
|-- .bash_history
|-- .gitosis.conf -> /home/git/repositories/gitosis-admin.git/gitosis.conf
|-- .ssh
| |-- ak.bak
| `-- authorized_keys
|-- gitosis
| `-- projects.list
`-- repositories
`-- gitosis-admin.git
|-- HEAD
|-- branches
|-- config
|-- description
|-- gitosis-export
| `-- keydir
| `-- dguenault@nagiosui.pub
|-- gitosis.conf
|-- hooks
| |-- applypatch-msg
| |-- commit-msg
| |-- post-commit
| |-- post-receive
| |-- post-update
| |-- pre-applypatch
| |-- pre-commit
| |-- pre-rebase
| `-- update
|-- index
|-- info
| `-- exclude
|-- objects
| |-- info
| `-- pack
| |-- pack-da582064a6fd6ebf9aa8a9d6b631fcfd99cd69bf.idx
| `-- pack-da582064a6fd6ebf9aa8a9d6b631fcfd99cd69bf.pack
`-- refs
|-- heads
| `-- master
`-- tags
Nous allons fixer quelques permissions :
chmod 755 /home/git chmod 700 /home/git/.ssh chmod 644 /home/git/.ssh/authorized_keys
Apparemment un petit bug empêche de rendre exécutable le fichier /home/git/repositories/gitosis-admin.git/hooks/post-update lors de l'initialisation. On va donc le faire à la main :
chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
Bien, nous avons terminé cette partie et allons pouvoir passer à la configuration proprement dite
L'administration (attribution des droits, création des dépôts ….) se fait entièrement à distance. Il n'est plus besoin d'intervenir sur le serveur en lui même. C'est la magie de gitosis qui permet d'administrer le serveur git via un … dépôt git.
L'administrateur sera donc l'utilisateur dont on a utilisé la clé publique pour initialiser gitosis.
git clone git@votreserveur:gitosis-admin.git && cd gitosis-admin
cela nous donne l'arborescence suivante :
`-- gitosis-admin
|-- gitosis.conf
`-- keydir
`-- user@host.pub
le répertoire keydir recevra les clé publique des utilisateurs autorisés a accéder aux dépôts le fichier gitosis.conf servira à configurer les acl et les dépots.
Cela est redoutablement simple !
[repo monprojet] description = description du projet owner = Propriétaire du dépot (informatif) <code> * Ensuite nous définissons les droits de l'utilisateur sur ce dépôt [group monprojet] writable = monprojet members = user@host
writable donne les droits d'écriture sur le dépôt monprojet
members est une liste d'utilisateurs séparés par des espaces (doit correspondre au fichier clé publique placé précédemment dans le répertoire keydir sans l'extension .pub)
Voila notre configuration est terminée. Il ne reste plus qu'a ajouter le fichier clé publique au dépot local
git add keydir/user@host.pub git commit -am "Ajout du dépôt monprojet et autorisations pour user@host"
Enfin on “pousse” la configuration vers le serveur git
git push
Pour l'administrateur c'est tout ! Voyons maintenant comment l'utilisateur va créer son dépot.
L'utilisateur à donc fait sa demande à l'administrateur pour pouvoir héberger son dépôt sur le serveur git. Il doit maintenant initialiser son dépôt sur son poste de travail
mkdir monprojet cd monprojet git init
Il faut maintenant déclarer le dépôt distant
git remote add origin git@monserveur:monprojet.git
Enfin on pousse notre dépot vers le serveur
git push origin master:refs/heads/master