Gestion de versions : utilisation de base de Subversion

De La Mouche VII


Cette page présente les commandes les plus courantes, afin de permettre de prendre en main rapidement le système de gestion de versions Subversion. Ne seront pas expliqués ici les principes de la gestion de versions. Voir à ce sujet la page Gestion de versions sur Wikipédia. Une documentation plus détaillée sur Subversion figure à l'adresse http://svnbook.red-bean.com/.

Voyez aussi la page Gestion de versions avec Subversion, Apache, OpenSSL pour des explications sur l'installation d'un serveur de gestion de versions. Il est bien sûr possible d'utiliser Subversion sans mettre en place toute cette infrastructure, notamment dans le cas d'une utilisation par un nombre très réduit de personnes ; l'accès se fera alors plutôt en local, ou à distance via SSH (voir le paragraphe Accès aux dépôts).

Création d'un dépôt

Comme indiqué dans le tutoriel d'installation, la création d'un dépôt se fait grâce à la commande svnadmin. En simple utilisateur, ou en root si vous n'avez pas accès en modification au répertoire des dépôts :

# svnadmin create /home/svn/nom_depot

Si vous avez opté pour une gestion centralisée des dépôts et un accès via Apache, il faut donner un accès en écriture à l'utilisateur qui lance Apache (le compte www-data sous Debian) :

# chown -R www-data /home/svn/nom_depot

Note : Le nom d'un dépôt peut contenir des caractères accentués lors d'une utilisation en local, mais lors de l'utilisation via Apache, la présence de tels caractères empêche l'accès au dépôt.

Accès aux dépôts

Pour accéder à un dépôt, on utilise le programme svn, auquel on passe une URI, qui peut être de l'une des formes suivantes :

  • file:///répertoire/du/dépôt : accès à un dépôt local.
  • http://serveur/chemin/depot : accès à un dépôt distant via le protocole HTTP.
  • https://serveur/chemin/depot : accès à un dépôt distant via HTTP sécurisé.
  • svn+ssh://serveur/répertoire/du/dépôt : accès à un dépôt distant via SSH.
  • svn://serveur/répertoire/du/dépôt : accès à un dépôt distant via le protocole interne de Subversion.

Dans le cadre de la configuration décrite sur la page Gestion de versions avec Subversion, Apache, OpenSSL, nous utiliserons une adresse du type https://serveur/svn/depot.

Pour se simplifier la vie, il peut être utile de créer une variable contenant l'adresse du répertoire de base des dépôts. On peut par exemple placer, dans son ~/.bashrc (si on utilise Bash) ou ~/.zshenv (si on utilise Zsh), une ligne de la forme :

export SVNROOT=https://serveur/svn

ou, si on accède aux dépôts en local et en supposant que les dépôts se trouvent dans /home/utilisateur/svn :

export SVNROOT=file:///home/utilisateur/svn

De même quel que soit le protocole d'accès à Subversion… Ainsi on pourra accéder de manière plus simple à un dépôt en utilisant $SVNROOT/nom_du_dépôt.

Commentaires de révisions

À chaque modification que vous effectuez sur le dépôt (ajout, modification, déplacement de fichiers), une nouvelle révision sera créée dans le dépôt. Lorsque vous propagez une nouvelle révision, vous êtes invité à décrire brièvement les changements effectués (et à donner toute autre information jugée utile). Vous pouvez renseigner ce commentaire de trois manières :

  • Grâce à l'option -m de svn, qui permet de donner le commentaire directement depuis la ligne de commande. Exemple : svn import un/répertoire $SVNROOT/nom_du_depot -m "Import initial."
  • Grâce à l'option -F de svn, qui permet de spécifier que le commentaire à utiliser figure dans un fichier préparé à l'avance. Exemple : svn ci -F /tmp/commentaire.txt
  • En l'absence de ces deux options, svn lancera un éditeur de texte (l'éditeur de texte par défaut, par exemple celui spécifié dans la variable d'environnement $EDITOR) de manière à ce que vous saisissiez le commentaire. Le fichier présente la liste des modifications apportées (et donc à commenter), et vous devez placer votre commentaire au-dessus de la ligne indiquée. On pourra par exemple obtenir, après remplissage du commentaire, un fichier de la forme suivante (ici les fichiers main.c et main.h ont été modifiés, et le fichier images/individu1.png créé) :
Modification de la gestion des paramètre de la gestion collaborative du tracking de l'individu dans main.c.
main.h : en-tête de la fonction track_individu() modifié en fonction.
Ajouté la photo de l'individu n°1 (images/individu1.png).
--Cette ligne, et les suivantes ci-dessous, seront ignorées--

A    images/individu1.png
M    main.c
M    main.h

Importation de données dans le dépôt

Dans le cas où on veut versionner un projet déjà existant, ou créer une sous-arborescence importante dans un dépôt, le plus simple est d'utiliser la commande svn import.

Dans les exemples suivants on considérera que nous avons, dans notre répertoire utilisateur, un répertoire projet qui contient l'arborescence suivante :

projet
|-- images
|   `-- test.png
|-- main.c
`-- main.h

Pour importer le répertoire projet à la racine du dépôt $SVNROOT/depot :

$> svn import rép $SVNROOT/depot

La racine du dépôt sera similaire au répertoire projet :

$> svn ls $SVNROOT/depot
images/
main.c
main.h

Pour importer le répertoire /tmp/musique, contenant les fichiers 1.ogg et 2.ogg, dans le dépôt $SVNROOT/depot, dans un sous-répertoire sound :

$> svn import /tmp/musique $SVNROOT/depot/sound

La racine du dépôt se présentera à présent de la façon suivante :

$> svn ls $SVNROOT/depot
images/
main.c
main.h
sound/
$> svn ls $SVNROOT/depot/sound
1.ogg
2.ogg

Obtenir une copie de travail

La copie de travail est un « exemplaire » local du dépôt, à laquelle on apporte les modifications voulues avant de les propager dans le dépôt. Cette copie de travail est indispensable : il n'est en aucun cas possible d'apporter des modifications directement dans les fichiers du dépôt.

L'opération consistant à récupérer une copie de travail est le « checkout », abrégé « co ». Pour récupérer une copie locale du dépôt $SVNROOT/depot dans le répertoire local depot, utiliser la commande suivante :

$> svn co $SVNROOT/depot

Si l'on veut nommer la racine de la copie de travail autrement que le dépôt (par exemple « copie_de_travail »), on peut utiliser :

$> svn co $SVNROOT/depot copie_de_travail

Modifications locales

Pour modifier un fichier de la copie locale, il suffit de l'éditer normalement. Subversion détectera automatiquement les fichiers qui ont été modifiés. En revanche, si l'on veut créer un nouveau fichier, déplacer, supprimer un fichier du dépôt, il est nécessaire d'utiliser des commandes spécifiques de subversion :

  • svn add fichier : le fichier fichier sera ajouté au dépôt lors de la prochaine propagation. Le fichier doit exister dans la copie de travail (Subversion ne le créera pas automatiquement).
  • svn mv fichier nouvel/emplacement : déplace le fichier fichier vers nouvel/emplacement (le comportement est le même que la commande système mv), à la fois dans la copie de travail et dans le dépôt (lors de la propagation des modifications).
  • svn cp fichier autre/emplacement : même principe, mais le fichier est dupliqué.
  • svn rm fichier : supprime le fichier fichier de la copie locale ; le fichier sera supprimé dans la révision propagée dans le dépôt.

Autres commandes utiles

Ces commandes sont à exécuter dans le répertoire de la copie locale.

  • svn info : affiche des informations concernant le dépôt. On peut aussi lancer svn info $SVNROOT/depot pour obtenir des informations sur un dépôt dont on n'a pas de copie de travail.
  • svn log : affiche l'historique des révisions du dépôt, avec les commentaires associés. Il est également possible, come pour la commande précédente, de spécifier l'adresse d'un dépôt plutôt que d'exécuter la commande depuis la copie de travail.
  • svn status (ou svn st) : affiche la liste des modifications apportées à la copie de travail par rapport à la révision récupérée du dépôt (sous la même forme que celle qui est présentée dans l'éditeur de texte lancé pour écrire le commentaire de révision, cf. supra).
  • svn diff : affiche la liste détaillée des modification apportées à chaque fichier, sous la forme d'un diff entre la copie de travail et la révision initiale. On peut afficher les modifications apportées à un fichier en particulier : svn diff fichier

Propager les modifications

L'opération consistant à propager dans le dépôt les modifications apportées à la copie de travail – autrement dit à créer une nouvelle révision semblable à la copie de travail – est le « commit » (abrégé « ci »). Depuis le répertoire de votre copie de travail, tapez simplement :

$> svn ci

Comme décrit dans le paragraphe Commentaires de révisions, vous devez renseigner, d'une manière ou d'une autre, ledit commentaire.

Une fois la propagation terminée, vous pouvez exécuter la commande suivante pour mettre à jour les informations du dépôt (notamment le journal, qui n'est pas mis à jour automatiquement) :

$> svn update