Mise en place d'un système de contrôle de version GIT

work in progress

Mise en place d'un système de contrôle de version GIT

Ce tutoriel est réalisé sous ubuntu server, il devrait fonctionner également sous debian

Introduction

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.

Objectifs

L'objectif de ce tutoriel est de mettre en place rapidement et simplement un serveur git décentralisé. Nous aurons la possibilité de :

  • parcourir les projets grâce à une interface web (gitweb)
  • cloner un projet public avec le protocole git (git-daemon)
  • cloner et travailler sur un projet de manière sécurisée (gitosis)

Enfin nous verrons l'intégration de notre serveur avec redmine.

Installation de git

C'est la partie la plus simple de ce tuto :

aptitude install git-core

Installation de gitosis

gitosis permet de gérer des dépôts git et fournit un accès aux dépôts grâce à ssh. Il gère les acl et fournit l'accès sans avoir besoin de créer de compte shell. L'ensemble de la configuration est versionnée avec git. L'intégralité de l'administration de notre serveur git se fera donc grâce au dépôt gitosis.

Prérequis

Utilisateur git

Manipulation à faire sur le serveur git

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

Clé SSH

Manipulation a faire depuis votre poste de travail

Nous avons besoin de la clé publique du futur administrateur pour qu'il puisse gérer la configuration par la suite et effectuer le clonage initial. Cette clé sert a s'authentifier sur le serveur git (je ne vais pas revenir sur les concepts d'authentification par clé, ce n'est pas le sujet de ce tutorial).

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

Installation

  • gitosis va être cloné à partir du serveur hébergeant le projet
mkdir ~/sources
cd ~/sources
git clone git://eagain.net/gitosis
  • Nous allons maintenant installer gitosis
  • le script d'installation a besoin du “module” python setuptools
sudo apt-get install python-setuptools
  • on lance l'installation
python setup.py install

Voila gitosis est maintenant installé.

Configuration de gitosis (et du serveur git)

Ces manipulations se font sur le serveur git sous l'identité de l'utilisateur git que nous avons créé dans la section prérequis

Nous allons initialiser gitosis dans le répertoire de l'utilisateur git et autoriser l'administration au possesseur de la clé publique.

Si le compte git a été accédé ou existait avant il faut veiller a supprimer le fichier /home/git/.ssh/authorized_keys, la phase d'initialisation positionnant la clé publique dans ce fichier.

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

Utilisation au quotidien

Administrer le serveur git

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.

Ce qui suit se passe intégralement sur le poste de travail et plus sur le serveur git

Récupération du dépôt gitosis-admin

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.

Ajouter un dépôt et un utilisateur autorisé à écrire dans ce dépôt

Cela est redoutablement simple !

  • Nous devons tout d'abord récupérer la clé publique de l'utilisateur et la placer dans le répertoire keydir
  • Ensuite nous allons éditer le fichier gitosis.conf et rajouter une section décrivant le dépot
[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.

Création du dépot par l'utilisateur

Manipulations faites par l'utilisateur depuis son poste de travail

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

Ressources en ligne

infra/git.txt · Dernière modification: 2010/03/04 09:20 par Olivier Jan
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0