Dans cet article nous allons voir une méthode pour fusionner deux (ou plus) dépôts SVN dans un nouveau dépôt sous Ubuntu. Cette méthode fonctionne bien sûr également parfaitement dans un dépôt déjà existant.

Subversion
Installation de Subversion+HTTPS
Commençons par l’installation de SVN, sur un nouveau serveur par exemple. Nous allons utiliser HTTPS comme protocole de connexion et de cryptage et je supposerai ici que Apache est déjà installé et configuré.
$sudo apt-get install subversion
Il faut ensuite activer le SSL dans Apache, ce qui est fait au moyen de la commande :
$sudo a2enmod ssl
Ignorez pour le moment le message demandant de recharger la configuration de Apache. Editez le fichier /etc/apache2/ports.conf et vérifiez bien que la ligne Listen 443 est décommentée. Ouvrez ce port sur le firewall au moyen de la commande suivante :
$sudo ufw allow from VOTRE_IP to any port 443
Il ne reste plus qu’à configurer le site SSL, ce qui se fait avec la commande :
$sudo a2ensite default-ssl
Cette fois il faut bien relancer Apache :
$sudo /etc/init.d/apache2 restart
Vous pouvez tester que le SSL fonctionne bien en vous connectant sur https://IP_SERVEUR/index.php. Vous devriez obtenir un avertissement vous disant que le certificat SSL n’est pas approuvé : c’est normal, puisque vous n’êtes pas une autorité officielle d’émission de certificats. Autorisez le certificat malgré tout et vous devriez obtenir votre page PHP Info en HTTPS.
Nous allons à présent ajouter le mod SVN à Apache :
$sudo apt-get install libapache2-svn
Passons à la configuration de SVN et à la création d’un dépôt de fichiers :
$sudo mkdir /var/local/svn $sudo mkdir chown www-data:www-data /var/local/svn $sudo -u www-data svnadmin create /var/local/svn
Nous avons ici créé un dépôt de fichiers situés dans /etc/local/svn et donné les droits nécessaires à Apache pour y accéder. Nous devons à présent éditer le fichier de configuration du mod SVN de Apache pour lui indiquer comment trouver ce dépôt de fichiers. A la fin du fichier /etc/apache2/mods-available/dav_svn.conf, ajoutez les lignes suivantes :
<Location /svn>
DAV svn
SVNPath /var/local/svn
AuthType Basic
AuthName « My Subversion Repository »
AuthUserFile /etc/subversion/user_access.passwd
Require valid-user
</Location>
L’entrée Location permettra à Apache de rediriger l’adresse https://IP_SERVEUR/svn/ vers le répertoire défini par la variable SVNPath, ici /var/local/svn. Le contrôle d’accès au dépôt de fichiers sera géré par une authentification basée sur un fichier /etc/subversion/user_access.passwd que nous allons à présent créer :
$sudo htpasswd -c /etc/subversion/user_access.passwd User1 $sudo htpasswd /etc/subversion/user_access.passwd User2
Notez bien le paramètre -c pour la première ligne : il sert à créer le fichier. Ne l’utilisez PAS ensuite, un nouveau fichier serait créé, supprimant l’ancien ! Remarquez également qu’il s’agit d’un simple fichier htpasswd, ce qui simplifie la création des utilisateurs.
Rechargez la configuration de Apache une dernière fois :
$sudo /etc/init.d/apache2 reload
Si tout s’est bien passé vous devriez pouvoir accéder à votre dépôt de fichiers en utilisant l’URL https://IP_SERVEUR/svn/ dans votre navigateur. Entrez un login/mot de passe correct et vous devriez obtenir une page pratiquement vide vous indiquant que vous en êtes à la Revision 0, ce qui est normal puisque le dépôt est encore vide. Vous pouvez également utiliser cette adresse dans TortoiseSVN, par exemple.
ATTENTION : si vous déposez un fichier svn.XXX (par exemple un dump de votre ancien SVN) dans /var/www vous ne pourrez plus accéder à votre dépôt de fichier, ni dans votre navigateur, ni dans TortoiseSVN ! Pensez à renommer ce genre de fichier pour qu’il ne commence pas par svn. et cela vous évitera pas mal de problèmes…
Installation de WebSVN
WebSVN est une interface web permettant d’accéder au contenu d’un dépôt SVN depuis un navigateur web et qui dispose de fonctionnalités intéressantes pour qui souhaite rapidement accéder à un fichier sans disposer d’un client SVN installé. Il nous permettra ici de suivre l’avancement des imports de fichiers lorsque nous fusionneront les deux dépôts SVN.
L’installation se fait très simplement :
$sudo apt-get install websvn
Indiquez le chemin /var/local/svn lorsque cela vous est demandé. Afin de gérer les droits d’accès à WebSVN, nous allons utiliser le même fichier que SVN, ce qui simplifiera la gestion. Bien entendu vous pouvez spécifier un autre fichier si vous souhaitez dissocier les droits d’accès à SVN et à WebSVN.
$sudo nano /etc/apache2/conf.d/websvn
A la suite de la ligne </IfModule>, ajoutez les lignes suivantes :
AuthType Basic
AuthName « WebSVN Authentication »
Require valid-user
AuthUserFile /etc/subversion/user_access.passwd
Vous pouvez à présent vous connecter sur https://IP_SERVEUR/websvn/ dans votre navigateur.
Export des anciens dépôts SVN
Pour exporter chacun des anciens dépôts SVN il suffit de se placer sur le serveur hébergeant le dépôt et d’entrer la commande suivante (après vous être placé dans le répertoire /bin de SVN) :
svnadmin dump /chemin/vers/dépôt/svn > /chemin/vers/répertoire/backup/dump_svn_1.bak
Cette commande fonctionne aussi bien sous Windows que sous Linux, il ne vous reste qu’à adapter les chemins en fonction de votre installation et de vos besoins.
Uploadez ensuite les fichiers dump sur la machine qui accueille votre nouveau dépôt SVN.
Import des dumps SVN dans le nouveau dépôt
Afin de garder une séparation logique entre les anciens dépôts j’ai préféré les importer dans des répertoires distincts. Pour cela nous allons créer deux répertoires /SVN1 et /SVN2 :
$ sudo -u www-data svn mkdir -m « Root » file:///var/local/svn/SVN1 file:///var/local/svn/SVN1
$ sudo -u www-data svn mkdir -m « Root » file:///var/local/svn/SVN2 file:///var/local/svn/SVN2