Navigation

Contactez-nous

Kitpages
17 rue de la Frise
38000 Grenoble
tel : 04 58 00 33 81

Par Philippe Le Van (@plv) Dernière mise à jour : 21 February 2007

Subversion

Introduction

Subversion (ou SVN) est un outil qui permet de travailler à plusieurs sur un programme sans se marcher sur les pieds :

  • On n'écrase pas les modification de l'autre par erreur
  • On peut revenir à une version antérieur du programme si besoin
  • On peut travailler simultanément sur plusieurs versions et réintégrer les modifications d'une version dans l'autre
  • ...

Bref c'est assez magique, mais un peu complexe à utiliser.

Cette page n'est pas une initiation à SVN (il y en a 2000 dans google je pense), mais quelques trucs et astuces dont un administrateur SVN peut avoir besoin.

Envoyer un mail après un commit

Un chef de projet ou un coordinateur peut souhaiter recevoir un email à chaque commit sur le répository svn pour garder une vision de ce qui se passe.

Pour ça il peut utiliser des hook scripts.

ce programme utilise sendEmail.pl de Brandon Zehm téléchargeable à l'adresse : http://caspian.dotconf.net/menu/Software/SendEmail/

pour ça il suffit d'ajouter dans le répertoire REPOSITORY/hooks/ le fichier suivant que l'on appellera post-commit (après l'avoir rendu exécutable)

#!/bin/sh
 
REPOS="$1"
REV="$2"
 
SUBJECT=`\
  echo -n "[SVN commit] R-$REV Log:";\
  svnlook log --revision \
        $REV /home/webadmin/htdocs/repository | head -n1`
MESSAGE=`\
  echo -n "REPOS:$REPOS ; REV:$REV ; AUTHOR:";\
  svnlook author --revision $REV /home/webadmin/htdocs/repository; \
  echo ; echo "LOG:";\
  svnlook log --revision $REV /home/webadmin/htdocs/repository;\
  echo;echo "LISTE DES FICHIERS:";echo "-------------";\
  svnlook changed --revision $REV /home/webadmin/htdocs/repository`
 
/usr/local/bin/sendEmail.pl -f subversion@kitpages.com \
  -t webmaster@kitpages.com \
  -u "$SUBJECT" -m "$MESSAGE" >> /dev/null

Interdire les commentaires vides

C'est très agaçant d'avoir la moitié des log messages (lors du commit) vides dans svn... pour interdire un log message vide on doit utiliser un hook script.

Il suffit de mettre un fichier pre-commit dans le répertoire REPOSITORY/hooks (rendre le fichier exécutable) qui contient :

#!/bin/sh
 
REPOS="$1"
TXN="$2"
 
SVNLOOK=/usr/local/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
   grep "[a-zA-Z0-9]" > /dev/null
if [ $? -ne 0 ] ; then
  echo "Mettez un message dans le commit.">/dev/stderr
  exit 1
fi
 
exit 0

Merge d'une branche sur l'autre

En fait, il n'y a pas vraiement de merge d'une branche sur l'autre avec SVN. On peut utiliser la commande "svn merge", mais il faut bien comprendre ce qu'elle fait.

Prenez l'exemple ci-dessous :

  • On travaille sur la branche 2.7 d'un produit (http://svn.xxx.com/myProduct/2.7)
  • la branche 2.7 a été créé par copie de la branche 2.6 lors de la révision 5234
  • La version en production est la 2.6
  • Un bug est repéré sur la version 2.6 et corrigé par un développeur sur la branche 2.6
  • L'idée est de réintégrer cette modification sur la branche 2.7, ainsi que toutes les modifications de la branche 2.6 depuis la création de la branche 2.7

Si vous avez compris toutes ces hypothèses les commandes sont notées en dessous...

Pensez dans le message du commit à mettre un message clair indiquant la révision de départ et la révision d'arrivée sur la branche source (2.6 dans notre cas) ainsi que les branches sources et destination... Si vous avez besoin de faire un autre merge après, vous aurez besoin de savoir à quelle révision vous vous étiez arrêté la dernière fois...

# aller dans le répertoire de la branche 2.7 sur sa machine locale
cd ..../myProduct/2.7
# appliquer les modifications depuis la création de la branche
svn merge -r 5234:HEAD http://svn.xxx.com/myProduct/2.6 .
# s'il n'y a pas de conflit, vérifier que tout
# marche bien et commiter le tout sur la branche 2.7
svn commit -m "merge [Rev:5234:5xxx] myProduct/2.6->myProduct/2.7"

dry-run sur svn update ?

Vous souhaitez voir ce que ferait un svn update, mais sans le faire réellement ?

essayez la ligne ci-dessous et regardez le paragraphe précédent pour comprendre ce que ça fait.

N'oubliez pas le point à la fin de la ligne.

svn merge --dry-run -r BASE:HEAD .

Commentaires

Ajouter un commentaire