Table des matières

Utilisation du dépôt Subversion en tant que développeur / contributeur identifié

Cette page se veut un résumé rapide des manipulations relatives au dépôt Subversion qu'un contributeur au projet QElectroTech peut être amené à effectuer. La bible sur Subversion reste toutefois le SVN Book

Faire un check out

Check out anonyme

svn checkout svn://svn.tuxfamily.org/svnroot/qet/qet/trunk qelectrotech_trunk

Check out identifié

Un check out permet de créer une copie local (on parle de “working directory”) d'un dossier présent dans le SVN (typiquement pour QET : le trunk ou la branche 0.3). Utilisez les commandes ci-dessous en remplaçant identifiant par votre login. La connexion passant par SSH, le mot de passe est généralement demandé 3 fois à chaque opération (svn checkout, commit, up, …). Voir la FAQ TuxFamily pour automatiser l'identification via une clé SSL.

# Check Out du trunk
svn co "svn+ssh://identifiant@svn.tuxfamily.org/svnroot/qet/qet/trunk" qelectrotech_trunk
# Check Out de la branche 0.3
svn co "svn+ssh://identifiant@svn.tuxfamily.org/svnroot/qet/qet/branches/0.60" qelectrotech_0.60
 
svn co "svn+ssh://identifiant@svn.tuxfamily.org/svnroot/qet/qet/branches/DXFtoQET3_DB" DXFtoQET3_DB

Je me suis gouré, j'ai fait un check out anonyme

Rendez-vous dans votre dossier de travail Subversion et utilisez les commandes suivantes :

svn_user=votre_identifiant_ici
find . -type f -name entries -exec sed -i "s,svn://svn.tuxfamily.org,svn+ssh://${svn_user}@svn.tuxfamily.org,g" {} \;
svn up

Mettre à jour son répertoire de travail

svn up

Les fichiers mis à jour sont alors affichés précédés par une lettre représentant l'état de la mise à jour :

Gérer ses modifications

Il est possible de lister les fichiers modifiés avec la commande :

svn status

L'affichage est le même que lors d'un svn up. Les fichiers peuvent être ajoutés au versionnement via svn add puis manipulés via svn mv, svn cp et svn rm. Les modifications peuvent être visualisés via svn diff ; exemple :

svn diff sources/qetproject.h
Index: sources/qetproject.h
===================================================================
--- sources/qetproject.h        (révision 449)
+++ sources/qetproject.h        (copie de travail)
@@ -21,7 +21,9 @@
 #include <QtXml>
 class Diagram;
 class ElementsCollection;
+class ElementsCategory;
 class XmlElementsCollection;
+class MoveElementsHandler;
 /**
        Cette classe represente un projet QET. Typiquement enregistre dans un
        fichier, il s'agit d'un document XML integrant des schemas ainsi qu'une

Il est également possible de visualiser les différences sur les fichiers texte de manière conviviale avec Kompare et ce petit script.

Dernière alternative :

svn diff | colordiff | less -R

Autres commandes utiles :

Envoyer ses modifications

Une fois les modifications terminées et dignes de figurer dans le dépôt Subversion, il faut les commiter. Avant de commiter, il est recommandé de faire un dernier svn up, pour s'assurer que des modifications n'ont pas été faites par un autre contributeur entretemps. Un commit doit être accompagné d'un message de commit ; exemple :

svn ci -m "Correction d'un bug qui empechait la fermeture d'un projet ne comportant aucun schema."

Il est toutefois recommandé d'effectuer un simple svn ci, qui utilisera l'éditeur mentionné dans la variable d'environnement $EDITOR pour éditer un fichier comprenant :

Cela permet de vérifier une dernière fois le contenu du commit. Si le fichier n'est pas modifié (:q! dans vim), svn donnera la possibilité d'abandonner le commit. Sinon, le commit est effectué après enregistrement du fichier et fermeture de l'éditeur (:x dans vim).

Correction d'un bug qui empechait la fermeture d'un projet ne comportant aucun schema.

--Cette ligne, et les suivantes ci-dessous, seront ignorées--
M    sources/diagramview.cpp
M    sources/qetproject.h
M    sources/qetproject.cpp

Note : pour diverses raisons, merci d'éviter les caractères accentués ou spéciaux dans les messages de commit.

Modifier un message de commit

Modifier un message de commit implique d'être l'administrateur du dépôt Subversion ⇒ demander à Xavier.

#!/bin/bash
 
REV="$1"
REPOS_URL="file:///home/xav/qet"
REPOS_PATH="qet"
TMP_FILE="commit_message"
 
# recupere le message actuel
svn log -r "${REV}" "${REPOS_URL}" | tail -n +3 | grep -v -- '----' > "${TMP_FILE}"
vim "${TMP_FILE}"
 
echo -n "Modifier (y/n) ? "
read answer
[ "${answer}" == "n" ] && exit 0
svnadmin setlog "${REPOS_PATH}" -r "${REV}" "${TMP_FILE}"
 
echo "Message de la revision ${REV} apres modification :"
svn log -r "${REV}" "${REPOS_URL}"