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
svn checkout svn://svn.tuxfamily.org/svnroot/qet/qet/trunk qelectrotech_trunk
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
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
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 :
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 :
C
) comme étant résolu.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 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}"