Manuel d'utilisation de Subversion
Voici un petit récapitulatif sur les opérations les plus basique sur un repository subversion ou communément appelé SVN...
Ce dernier vas se décomposer en trois parties :
Sommaire |
[modifier] Organisation du repository
Par convention on trouvera de base les trois fameux dossiers trunk, branches, et tags. Ils ne sont pas créés par défaut et il est conseillé de les créer si ils n'y sont pas.
- trunk
- dossier par défaut dans lequel se trouvera la copie de base (dernière version en développement).
- tags
- permet de laisser une trace d'une version donnée; ces tags sont conventionnellement en lecture seule. Exemple : vous avez terminé de développement (dans le trunk) de la version x.y.z, dans ce cas là vous faites "svn copy trunk tags/relase-x.y.z" ce qui permet à n'importe qui de récupérer la version stable x.y.y en faisant un "svn checkout [...]/tags/relase-x.y.z" d'une façon simple sans devoir aller fouiner dans les logs (sous réserve qu'ils soient bien maintenus) pour retrouver le numéro de la révision correspondante.
- branches
- permet de faire un fork du trunk (développement parallèle) ou d'un tag (maintenance d'une version antérieur). Exemple : vous avez fait un tag de la version 1.0.0 de votre logiciel, vous êtes contant car vous le croyez bien stable et vous êtes parti joyeusement dans le développement de la version 1.1 ou 2. Cependant votre version 1.0.0 comme par définition est truffée de bugs, vous êtes obligé de vous replonger partiellement dans de code de cette version. Pour ce faire vous faites un "svn co tags/relase-1.0.0 branches/relase-1.0.x" quitte, apres avoir débegué, à la retager en faisant un "svn copy branches/relase-1.0.x tags/relase-1.0.1", etc... C'est dans ce même dossier qu'on mettra tous les développement parallèles comme par exemple une partie expérimentale et j'en passe...
[modifier] Premier rapatriement ou checkout
Pour le développement, il vous suffit de faire un svn co (svn checkout) du trunk du projet car si vous faîtes un svn co de la racine et que le repository comporte 1 trunk, 10 branches et 100 tags vous vous retrouvez avec 111 copies bêtes et méchantes de votre projet en local, ce qui n'est pas le cas sur le serveur qui, lui, stocke uniquement les différences (stockage incrémental)...
$ svn co https://secure.mr-ti.com/svn/[...]/trunk project_name
[...] correspont par exemple à etu/projet_machin. "project_name" correspond au dossier local dans lequel sera stocké la copie du repo svn.
Commande d'aide (checkout) :
$ svn help co
[modifier] Utilisation
[modifier] Ajout, suppression, copie et déplacement
- svn add (fichier|repertoir)+
- Ajoute un ou plusieurs fichier(s) ou/et répertoir(s) (de façon récursif par défaut).
- svn del (fichier|repertoir)+
- Supprime un ou plusieurs fichier(s) ou/et répertoir(s).
- svn copy source destination
- alias svn cp, effectue une copie d'un fichier ou répertoire.
- svn move source destination
- alias svn mv, effectue un déplacement d'un fichier ou répertoire.
[modifier] Edition de fichier
Il est important de bien verrouiller un fichier et de ne pas oublier de le déverrouiller après son utilisation. Les commande utilisées sont le svn lock et le svn unlock. Cependant il y a quelques pièges à éviter...
Voici un exemple d'utilisation :
L'exemple est réalisé dans un sous répertoire de mon projet UniComCtrl (URL read only : http://svn.mr-ti.com/unicomctrl/trunk/unicomcl/conf/).
Avant intervention, voilà ce que donne la commande svn ls -vR où le "v" correspond à verbeux et "R" à récursif :
en suite on tape les commande :
on remerque les 0 assez discrets qui signifie que les fichiers sont verrouillés. En suite j'effectue une modification du fichier "settingsfile.lex" uniquement et je fait un svn ci (svn commit), qui, si on ne spécifie pas de fichier est récursif à partir du répertoire où on se trouve. En fin on fait un svn ls -vR :
On remarque que le svn ci a déverrouillé tous les fichiers. Au passage il faut pas oublier de vérifier que tous les fichier dont vous avez plus besoin sont bien déverrouillés ce qui en principe ne devrait pas arrivé si vous faites un svn ci à la racine. Dans le cas où vous spécifiez les fichiers modifiés (ce que fait généralement les clients SVN graphiques tel que kdesvn ou tortoisesvn), les fichier non modifiées qui ne seront pas commités et on a tendance à oublier de les déverrouiller...
Voici un exemple :
Une remarque au passage : l'option -m "message" permet de rajouter un message au moment d'un svn lock ou svn ci. Elle est obligatoire (quitte à laisser la chaine vide) pour un commit, mais en revanche, facultative pour un lock.
[modifier] Autres...
svn help est votre amis :-)


