Notes sur SVN




Installation du serveur SVN

Le présent document traite de l’installation d’un serveur SVN sur le système d’exploitation DEBIAN

Récapitulatif:

Utilisateur SVN Utilisateur UNIX Groupe UNIX Mot de passe UNIX Mot de passe SVN
bill bill svnuser pu_bill ps_bill
joe joe svnuser pu_joe ps_joe
guest someone svnuser password_for_unix password_for_svn
Notez que les trois utilisateurs UNIX appartiennent au même groupe ("svnuser", en l'occurrence).
Installation du logiciel
$apt-get install subversion
Création des utilisateurs UNIX

Lorsque le dépôt SVN est accédé via SSH, le serveur SVN s’exécute avec l’UID de l’utilisateur authentifié par SSH. Dans notre exemple, l'UID peut prendre 3 valeurs: bill, joe ou someone.

Si plusieurs utilisateurs doivent accéder au dépôt, ces derniers doivent appartenir au même groupe (autrement dit, ils doivent présenter le même GID).

$groupadd svnuser
$useradd -g users -G svnuser -s /bin/bash -p pu_bill -d /home/bill bill
$useradd -g users -G svnuser -s /bin/bash -p pu_joe -d /home/joe joe
$useradd -g users -G svnuser -s /bin/bash -p password_for_unix -d /home/someone someone

$mkdir /home/bill
$mkdir /home/joe
$mkdir /home/someone
$chown bill:users /home/bill
$chown joe:users /home/joe
$chown someone:users /home/someone
Création du répertoire utilisé pour stocker les dépôts
$mkdir /var/svn
$chown root:svnuser /var/svn/
$chmod g+xwr /var/svn/
Notez que le répertoire utilisé pour stocker les dépôts appartient au groupe "svnuser". Par conséquent, les utilisateurs bill, joe et someone possèdent les droits en exécution, lecture et écriture sur ce répertoire.
Créer un dépôt
$svnadmin create /var/svn/projet-test
$chown -R root:svnuser /var/svn/projet-test
$chmod -R g+xwr /var/svn/projet-test

La commande svnadmin create va créer une arborescence sous le répertoire /var/svn/projet-test.

Assurez-vous que les utilisateurs bill, joe et someone possèdent les autorisations nécessaires pour accéder au nouveau dépôt.

	$chown -R root:svnuser /var/svn/projet-test
	$chmod -R g+xwr /var/svn/projet-test
Création des utilisateurs SVN

Editez le fichier: /var/svn/projet-test/conf/svnserve.conf. Ce fichier doit contenir les lignes suivantes:

Editez le fichier: /var/svn/projet-test/conf/passwd. Dans ce fichier, vous déclarez les utilisateurs SVN, ainsi que leurs mots de passe.

Création du script de démarrage du serveur SSH

Créez le fichier "/etc/init.d/svnserve".

Déclarer le service:

$chmod +x /etc/init.d/svnserve
$update-rc.d svnserve defaults

Pour démarer le service:

$/etc/init.d/svnserve start
Configuration du client SVN
URL de connexion au serveur SVN via SSH
Utilisateur SVN Utilisateur UNIX sur labo URL Authentification SVN
bill bill svn+ssh://bill@labo/var/svn/projet-test --username bill --password ps_bill
joe joe svn+ssh://joe@labo/var/svn/projet-test --username joe --password ps_joe
guest svnusers svn+ssh://svnusers@labo/var/svn/projet-test --username guest --password password_for_svn
Utilisation du client SVN
Obtention d'une copie de travail
$svn co svn+ssh://bill@labo/var/svn/projet-test --username bill --password ps_bill

La commande précédente va créer le répertoire projet-test. Ce répertoire contient une copie du dépôt.


Notez le numéro de révision de la copie de travail : 0.

Il est possible d’obtenir une copie du projet pour un numéro de révision donné.

svn co svn+ssh://bill@labo/var/svn/projet-test --username bill --password ps_bill -r <numéro de révision>.
Ajout d'un fichier à la copie de travail
$svn add README.TXT 
$svn commit README.TXT -m "First import"
$svn add hello_wolrd.pl
$svn commit hello_wolrd.pl -m "First import"

Il est intéressant de jeter un coup d’oeil aux numéros de révisions des entrées de la copie de travail, ainsi que du dépôt.

Copie de travail

Dépôt

Notez que, à ce stade, les numéros de révision au sein du dépôt, et au sein de la copie de travail sont différents. Si vous mettez à jour votre copie de travail (svn update), alors les numéros de révision des entrées de la copie de travail seront tous identiques.

Les numéros de révision s'appliquent à tout le dépôt (et pas à des fichiers individuels).

Si une entrée du dépôt change (commit), si une entrée est ajoutée au dépôt (add), ou si une entrée est supprimée du dépôt (remove), alors c’est le dépôt dans sa globalité qui change.

Si l'on met à jour la copie de travail:


Suppression d'un fichier à la copie de travail
$svn remove hello_wolrd.pl
$svn commit hello_wolrd.pl -m "Remove this file..."

Là encore, il est intéressant de jeter un coup d’oeil aux numéros de révisions des entrées de la copie de travail, ainsi que du dépôt.


Vous constatez que les numéros de révisions des entrées du dépôt diffèrent de ceux des entrées de la copie de travail. Il est recommandé de mettre à jour la copie de travail (svn update).

Ajout d'un répertoire à la copie de travail
$mkdir bin
$svn add bin
$svn commit bin -m "Test on a directory"
Suppression d'un répertoire de la copie de travail
$svn remove bin
$svn commit bin -m "Remove this directory..."
Mettre à jour la copie de travail
$svn update
Lors d’une mise à jour de la copie de travail, SVN peut signaler des conflits (CF section "Gestion des conflits").

Il est possible de mettre à jour le projet par rapport à un numéro de révision donné.

svn update -r <numéro de version>
Obtention d'information sur un fichier

Il est possible d'obtenir de l'information sur:

Exemple:

$svn info <chemin vers le fichier>
$svn info <url vers le fichier>

Remarque: les numéros de révision de la copie de travail de Bill et du dépôt ne sont pas identiques.

La copie de travail de Bill n'est donc pas à jour. Par conséquent, si Bill tente d'enregistrer les modifications qu'il a apportées au fichier, l'opération échouera.

Solution: il faut mettre à jour sa copie de travail (svn update).

Afficher les différences

Afficher les différences entre un fichier de la copie de travail, et son "correspondant" dans le dépôt, à numéros de révisions égaux.

$svn diff README.TXT
La comparaison s'effectue "à numéros de révision égaux" (le numéro de révision du fichier de la copie de travail). Dans l'exemple ci-dessous, le numéro de révision utilisé pour la comparaison est 4. C'est le numéro de révision du fichier de la copie travail.

Afficher les différences entre un fichier de la copie de travail, et la dernière version du fichier (dans le dépôt).

$svn diff README.TXT -r HEAD
La comparaison s'effectue "à numéros de révision différents". Dans l'exemple ci-dessous, on compare le fichier de la copie de travail dont le numéro de révision est 4, avec son "correspondant" dans le dépôt dont le numéro de révision est 5.

Afficher les différences entre deux révisions d'un fichier

$svn diff README.TXT -r 8:10
Lister les entrées
Il est possible de lister les entrées:

Copie de travail

$svn list -v

Dépôt

$svn list <url vers le dépôt> -v
Historique des modifications

Afficher toutes les modifications apportées à un fichier donné

$svn log -v README.TXT

Afficher toutes les modifications apportées à un fichier donné, sur un numéro de révision donné

$svn log -v README.TXT -r 6

Afficher toutes les modifications apportées à un fichier donné, entre deux numéros de révision

$svn log -v README.TXT -r 6:11

Si le fichier n'est plus dans la copie de travail

$svn log svn+ssh://bill@labo/var/svn/projet-test/bin@3 -v
Gestion des conflits

Les conflits apparaissent toujours lors d'une mise à jour de la copie de travail (svn update).

Un conflit apparaît dans la situation suivante:


À ce stade, trois fichiers sont créés :

Vous remarquerez également que le fichier README.TXT contient désormais "les différences" à l'origine du conflit.

Les branches

Pour SVN, une branche n’est qu’une "copie d'une partie d'un dépôt". Autrement dit: créer une branche revient à copier une partie d'un dépôt.

Par convention, lorsque l’on crée un dépôt, on crée un répertoire « trunk » qui sera la « branche principale » (le tronc) du projet. Notez que le choix du nom « trunk » est arbitraire. Dans l’exemple qui suit, nous créerons un répertoire « master ».

Création du tronc:


Création d'une branche: