« Subversion » : différence entre les versions

De WikiBR
m (hum, sinon on peut pas commiter)
mAucun résumé des modifications
Ligne 36 : Ligne 36 :


SVN utilise son propre serveur. Celui-ci se lance simplement en appelant le daemon svnserver. Pour plus de sécurité, ou pour aussi plus de clarté, on rajoute un chroot :
SVN utilise son propre serveur. Celui-ci se lance simplement en appelant le daemon svnserver. Pour plus de sécurité, ou pour aussi plus de clarté, on rajoute un chroot :
  sudo -u svn svnserver -d -r /home/svn
  sudo -u svn svnserve -d -r /home/svn


== Configuration des repositoires ==
== Configuration des repositoires ==
Ligne 172 : Ligne 172 :


Pour la plupart des utilisateurs la partie à co sera trunk, mais ça peut être aussi branches/nom_de_la_branche, ou  Tag/nom_du_tag... ou n'importe quel sous répertoire...
Pour la plupart des utilisateurs la partie à co sera trunk, mais ça peut être aussi branches/nom_de_la_branche, ou  Tag/nom_du_tag... ou n'importe quel sous répertoire...
----
Retour :
[[Accueil]]

Version du 27 juin 2005 à 19:40

La SVN (petit nom de SubVersion) a pour but de remplacer la CVS. Pour l'utilisateur lambda, l'utilisation en est quasiment identique, mais les fonctionnalité supplémentaires sont tout de même non négligeables. Cette page explique comment importer la CVS dans SVN proprement et comment configurer les repositories pour que les accès soit limités comme désiré.

Elle est actuellement sur Skinwel pour 2 raisons :

  • pour éviter de se retrouver comme la CVS sur Gwennoz auquel trop de personnes ont accès
  • parce que skinwel héberge très peu de services

Installation de SVN

Installation du programme

L'installation comporte plusieurs éléments : SubVersion, le viewer Web, le mailer, le script d'import de CVS...

apt-get install subversion subversion-tools cvs2svn websvn svnmailer

Il faut alors créer le compte utilisateur svn

adduser svn
mkdir /home/svn
chown svn:root /home/svn

Création des repositoires

SVN gérant projet par projet, il faut séparer les projets. On va donc créer un repositoire par projet :

svnadmin create --fs-type fsfs /home/svn/nom_du_projet

Une fois le repositoire créé, il faut réaliser l'import depuis la CVS :

cd /tmp
scp -r gwennoz:/home/cvs cvs
cvs2svn --existing-svnrepos -s /home/svn/nom_du_projet cvs/nom_du_projet

Il faut répéter l'opération pour tous les projets...

Si un projet a des sous projets importants, il faut vaut mieux créer un repositoire pour chaque sous projet important

Lancement du serveur

SVN utilise son propre serveur. Celui-ci se lance simplement en appelant le daemon svnserver. Pour plus de sécurité, ou pour aussi plus de clarté, on rajoute un chroot :

sudo -u svn svnserve -d -r /home/svn

Configuration des repositoires

La svn sert à stocker différents type de données :

  • des projets publics
  • des projets privés
  • des données de configuration

Il faut donc une configuration spécifique pour chaque type de projet. Les configurations se font via :

  1. la configuration du repositoire (répertoire /home/svn/projet/conf/)
  2. les droits d'accès au répertoire.

Projet public

Un projet public est un projet dont les sources sont publiques accessibles à tous. Pour un tel projet on doit avoir :

  • un accès anonyme en lecture
  • des accès lecture/écriture pour les développeurs
  • un accès au websvn

droit d'accès au repositoire

Les droits d'accès par défaut (644 ou 755) sont corrects, le projet étant public. Ils permettent à la fois l'accès via svnserve, web et svn+ssh. Il suffit simplement de donner la propriété du répertoire au bon utilisateur

cd /home/svn
chown svn -R nom_du_projet

configuration du serveur svn

Le fichier svnserve.conf doit être de la forme :

# Global Section
[general]
# Name of the project
realm = le nom du projet

# Read-only anonyme access
anon-access = read
# Read/Write access for authentified users
auth-access = write

# Where to find authorised users list
password-db = /home/svn/passwd

Et remplir le fichier de /home/svn/passwd est un fichier partagé par tous les repositories public, et les projets privés. Il doit avoir des droits d'accès restrictifs (600 en svn:root).

# User list
[users]
name_user1 = password_user1
name_user2 = password_user2
name_user3 = password_user3
...

configuration du websvn

Le websvn doit afficher se projet, il faut donc l'indiquer. Pour ceci il suffit d'éditer le fichier /etc/websvn/svn_deb_conf.inc et d'ajouter la ligne :

$config->addRepository("nom du projet", "/home/svn/nom_du_projet");

Projets privés

Les projets privés sont des projets internes au BR dont les sources ne sont pas diffusées. Il bénéficie donc d'un accès en lecture/écriture pour les développeurs... et rien d'autre.

droits d'accès au repositoire Il faut bien s'assurer que l'accès au répertoire est limité aux seuls personnes qui ont le droit d'accès... c'est à dire au serveur svn

cd /home/svn
chmod g-rwx -R projet
chmod o-rwx -R projet
chown svn -R projet

Configuration du serveur svn

Le fichier svnserve.conf doit être de la forme :

# Global Section
[general]
# Name of the project
realm = le nom du projet

# Only known users can access
anon-access = none
# Read/Write access for authentified users
auth-access = write

# Where to find authorised users list
password-db = /home/svn/passwd

Et remplir le fichier de /home/svn/passwd est un fichier partagé par tous les repositories public, et les projets privés. Il doit avoir des droits d'accès restrictifs (600 en svn:root).

# User list
[users]
name_user1 = password_user1
name_user2 = password_user2
name_user3 = password_user3
...

Fichiers de configuration

Les fichiers de configuration vivent dans un autre monde... dans lequel il faut absolument éviter tout accès pirate à la machine. Pour ceci le mieux est d'utiliser la méthode parano de l'authentification via ssh et du transfert via svn over ssh. La configuration est très simple

droits d'accès

Le svn+ssh utilise le compte de l'utilisateur sur la machine, il faut donc que tous les utilisateurs qui l'utilisent aient un compte sur la machine. Les droits d'accès aux fichiers sont ceux de l'utilisateur. Il faut donc placer les newsmestres dans le group news et les roots dans le groupe adm.

Ensuite :

cd /home/svn
chmod o-rwx -R projet
chmod g+w -R projet
chown svn:news -R news //Dans le cas de la conf des newsgroups
chown svn:adm -R projet //Dans le cas des utilitaires root

configuration du serveur svn

# Global Section
[general]
# Name of the project
realm = le nom du projet

# Only known users can access
anon-access = none
# Read/Write access for authentified users
auth-access = write

# No svn authentificcation... it uses Unix's one
# password-db = passwd

Utilisation de svn

SVN s'utilise aussi simplemennt que CVS avec cependant quelques différences notables, en particulier la checkout utilise une syntaxe différente

Récupérer un module

La commande diffère selon que le module est accessible via le svnserver ou svn+ssh :

en svn :

svn co svn://[user@]skinwel/nom_du_projet/partie_a_co

en svn+ssh :

svn co svn+ssh://user@skinwel/home/svn/nom_du_projet/partie_a_co

Pour la plupart des utilisateurs la partie à co sera trunk, mais ça peut être aussi branches/nom_de_la_branche, ou Tag/nom_du_tag... ou n'importe quel sous répertoire...