Préambule
Intéressons nous à Subversion ou SVN pour les intimes. Cela faisait pas mal de temps que l'idée me trottait de remplacer l'antédiluvien VSS que nous utilisons depuis quelques années pour gérer nos sources par un SCM un peu plus moderne, Opensource et utilisé par un plus grand nombre de développeurs (communauté quand tu nous tiens). Un lien sur les différences entre plusieurs solutions SCM.
La solution optimale aurait été un serveur SVN sous Linux (dans une autre vie, j'aurais sans doute exploité mes compétences Système et Réseau), mais l'ensemble de l'équipe est plus à l'aise sous Windows, adopter un nouvel outil passe aussi et d'abord par sa facilité d'appropriation, cela imposait donc une solution SVN sous Windows.
La partie installation est un condensé d'articles trouvés sur le Net, les liens sont dans les ressources en fin de billet.
Installation
serveur Subversion
Subversion
Télécharger les binaires du serveur SVN Windows (un zip), prendre la version Tigris pour Apache 2.0 (ou 2.2 selon votre choix) : Subversion tigris Windows
⇒ version 1.5.0 SVN pour Apache 2.0
⇒ version 1.5.0 SVN pour Apache 2.2
Télécharger le binaire pour l’installation du service SVNService : SVNService (on peut également le retrouver sur le site de tigris : Repository SVNService)
- Décompacter le ZIP du serveur SVN (svn-win32-x.y.zip) dans le répertoire C:\Program Files\svn\
- Dans les variables d’environnement (Control Panel → System → Advanced → Environnement variables → System variables)
⇒ Ajouter le chemin C:\Program Files\svn\bin dans le PATH.
⇒ Ajouter la variable SVN_EDITOR (éditeur par défaut utilisé par SVN), faire pointer sur l’exé notepad.exe ou tout autre éditeur
- si non déjà créé, en ligne de commande, création d’un répertoire de repository
svnadmin create “d:\subversion_repos”
- si non déjà configuré, configuration du repository :
⇒ ouvrir le fichier d:\subversion_repos\conf\svnserve.conf : décommenter les lignes [general] , anon-access = read, auth-access = write, et password-db = passwd
⇒ ouvrir le fichier d:\subversion_repos\conf\passwd : décommenter la ligne [users], et ajouter les utilisateurs SVN, 1 par ligne, de la façon suivante : login = passe
- tester le serveur, lancer en ligne de commande
svnserve –daemon –root “d:\subversion_repos”
- créer un projet, pour myproject avec les 3 répertoires couramment ajoutés (trunk, branches, tags). SVN ouvre un fichier, remplir ou non la 1ère ligne puis sauvegarder :
svn mkdir svn:localhost/myproject
svn mkdir svn://localhost/myproject/trunk
svn mkdir svn://localhost/myproject/branches
svn mkdir svn://localhost/myproject/tags
Service Subversion
Le service permet de ne pas lancer à la main le serveur SVN (svnserve) mais qu’il le soit par un service Windows en y incluant les paramètres –daemon –root “d:\subversion_repos”
- Décompacter SVNService.zip dans le même répertoire que les binaires SVN (C:\Program Files\svn\bin) pour avoir accès en ligne de commande à l’exé SVNService.exe.
- Installer le service :
svnservice.exe -install --daemon --root "d:\subversion_repos"
- Mettre le service en démarrage automatique : $ services.msc, puis sur le service SVNService, positionner le Startup type à Automatique.
- Lancer ou arrêter le service :
net start svnservice
net stop svnservice
A partir de là, le serveur est joignable :
svn ls svn://localhost/myproject/trunk
Pour enlever le service :
svnservice.exe -remove
serveur Apache pour l'accès HTTP
Le serveur SVN fournit un protocole d’accès svn, il peut être intéressant d’accéder aux sources par HTTP (via WebDAV), pour un accès à distance par exemple : soit par le navigateur, soit par un client SVN.
Pré-requis : Le serveur SVN doit être préalablement installé.
- Télécharger les binaires Windows d’Apache 2.0 (ou 2.2 suivant la version SVN), avec SSL : Binaires
- Installer Apache, par exemple sur D:\Program Files\Apache Group
- Comme pour Subversion, ajouter le répertoire binaire D:\Program Files\Apache Group\Apache2\bin au PATH
- Copier / Coller les .so de Subversion vers le répertoire modules d’Apache :
⇒ C:\Program Files\svn\bin\mod_authz_svn.so et C:\Program Files\svn\bin\mod_dav_svn.so vers D:\Program Files\Apache Group\Apache2\modules
- Ajouter leur chargement en modifiant le fichier de configuration d’Apache D:\Program Files\Apache Group\Apache2\conf\httpd.conf
⇒ décommenter la ligne LoadModule dav_module modules/mod_dav.so pour activer WebDAV
⇒ ajouter la ligne LoadModule dav_svn_module modules/mod_dav_svn.so
⇒ ajouter la ligne LoadModule authz_svn_module modules/mod_authz_svn.so
- Toujours dans le fichier D:\Program Files\Apache Group\Apache2\conf\httpd.conf, ajouter le répertoire d’accès Web au Repository Subversion, cela permettra d’avoir un accès à http://localhost/svnrepos :
<Location /svnrepos>
DAV svn
# répertoire de dépot
SVNPath D:/subversion_repos
SVNIndexXSLT "/svnindex.xsl"
SVNAutoversioning on
# Indique comment authentifier les utilisateurs
AuthType Basic
AuthName "Référentiel Subversion"
# fichiers des utilisateurs
AuthUserFile D:\subversion_repos\conf\utilisateurs.txt
Require valid-user
# fichiers des permissions
AuthzSVNAccessFile D:\subversion_repos\conf\authz
ErrorDocument 404 default
</Location>
- Télécharger la feuille XSLT svnindex.xsl sur XSLT ainsi que la feuille CSS svnindex.css et placer ces 2 fichiers dans le htdocs d’Apache : D:\Program Files\Apache Group\Apache2\htdocs
- Créer les permissions utilisateurs (groupe dev qui accéderont au répertoire web svnrepos) : ouvrir ou créer le fichier D:\subversion_repos\conf\authz, et y ajouter les lignes suivantes :
[groups]
dev = olivier,dev2,dev3
[svnrepos:/]
@dev = rw
* =
[svnrepos:/html]
@dev = rw
* =
[svnrepos:/src]
@dev = rw
* =
[svnrepos:/changelog]
@dev = rw
* = r
- Ajouter les comptes utilisateurs Apache, en ligne de commande, se mettre dans le répertoire Subversion conf (-bc crée le fichier, -bm ajoute au fichier) :
d:
cd D:\subversion_repos\conf
htpasswd -bc utilisateurs.txt olivier monpasse
htpasswd -bm utilisateurs.txt dev2 monautrepasse
htpasswd -bm utilisateurs.txt dev3 myanotherpwd
Relancer le service Apache :
net stop apache2
net start apache2
Le repository est dorénavant accessible via l’adresse http://localhost/svnrepos ou http://serveur/svnrepos, une popup login/mot de passe doit s’afficher pour taper le login et mot de passe précédemment fixé par htpasswd
Migration de la base VSS vers SVN
Pour l'instant, nous en sommes au stade des tests.
Un outils a été développé : VSSMigrate. Il est préférable de prendre une des contributions, celles-ci permettent de conserver les utilisateurs de la base VSS pour les migrer vers SVN.
Un exemple de fichier de configuration VSSMigrate.ini.
Plusieurs soucis relevés :
- VSSMigrate n'autorise pas de prendre la racine de VSS (/$) mais uniquement un projet sur la racine (/$myproject). Notre plateforme est constituée d'une bonne centaines de projets, il va falloir donc automatiser la prise en compte de tous ces projets.
- Pour conserver l'historique (en termes de dates), VSSMigrate change la date système du serveur VSS, mais apparemment, il ajoute et non retranche les dates sur les sources, à voir donc.
Ressources
Je suis parti des liens suivants :
Alternatives
Pour des projets Opensource où le code peut être libre, il peut être intéressant d'utiliser des services en ligne pour gérer ses projets, une petite liste non exhaustive de services ...et j'adore les services en ligne.
Plateforme GitHUB
GitHub, basé sur Git (créé par Linus pour gérer le noyau Linux, c'est un SCM distribué), parait être un sérieux concurrent à la plateforme Google code, cette dernière utilise Subversion. git-svn pourrait être un pont entre les 2 mondes. Dans sa version gratuite, GitHUB permet d'héberger jusqu'à 100 Mo de sources.
La plateforme GitHUB est conviviale et facile d'utilisation, avec des apports Aajx qui vous facilitent la vie, le tout avec une approche Web 2 : Wiki, réseau, graphique de la time line
avec les auteurs des commits
, design soigné.
Un plus : utilisation de clés publiques/privées SSH (via ssh-keygen ou PuTTYGen + Pageant, voir ce billet pour un exemple d'utilisation pour PuTTY), bien utile dans la pratique.
En ce qui concerne les clients Windows, pour avoir testé le client msysGit, il y a encore un peu de boulot pour concurrencer TortoiseSVN.
Malgré tout, sur le répertoire de travail, les 2 commandes suivantes permettent de commiter sur GitHUB :
git commit -a
git push
Plateforme Google Code
Google code vous permettra d'héberger vos projets à moindre coût (gratuit). A l'image de Google, l'interface est sobre et efficace, très simple à utiliser. Parmi les fonctionnalités :
- Subversion : public ou privé pour les éditeurs (une clé est générée en tant que mot de passe au projet)
- Wiki
- Dépôt de fichiers
Moins user friendly que GitHUB, Google code reste accessible et surtout gratuit sans limite de stockage des sources.
Plateforme CodePlex
CodePlex est la plateforme Microsoft de partage de sources.
Mis à part trouver des sources de projets, je n'ai pas testé la plateforme en tant qu'éditeur, mais je ne doute pas que cela doit être bien, malgré une interface quelque peu désuète je trouve.
SvnBridge permet d'aller chercher des sources via TortoiseSVN, il sert de pont entre SVN et Codeplex.
Clients SVN
- TortoiseSVN est LE client Windows à avoir : simple d'utilisation, fiable, quelques principes :
- SVN checkout : ramène les sources d'un projet pour initialiser un répertoire de travail local
- Commit : met à jour le serveur de sources avec les fichiers locaux (du répertoire de travail) modifiés
- Update : va chercher les mises à jour du serveur pour mettre à jour la version locale
- pour une intégration directe à l'IDE (VStudio 2005 ou 2008), on pourra également installer AnkhSVN