Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
doc:subversion [22/12/2016 15:20] – [Check out identifié] scorpio810doc:subversion [11/08/2017 01:21] (Version actuelle) – [Check out identifié] scorpio810
Ligne 1: Ligne 1:
 +====== 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 [[http://svnbook.red-bean.com/en/1.5/svn-book.pdf|SVN Book]]
 +===== Faire un check out =====
 +===== Check out anonyme =====
 +
 +<code bash>
 +svn checkout svn://svn.tuxfamily.org/svnroot/qet/qet/trunk qelectrotech_trunk
 +</code>
 +
 +
 +===== 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 [[http://faq.tuxfamily.org/User/Fr#Utilisation_de_SSH_sous_GNU.2FLinux|FAQ TuxFamily]] pour automatiser l'identification via une clé SSL.
 +
 +<code bash>
 +# 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
 +
 +</code>
 +
 +===== Je me suis gouré, j'ai fait un check out anonyme =====
 +Rendez-vous dans votre dossier de travail Subversion et utilisez les commandes suivantes :
 +<code bash>
 +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
 +</code>
 +
 +===== Mettre à jour son répertoire de travail =====
 +<code>svn up</code>
 +Les fichiers mis à jour sont alors affichés précédés par une lettre représentant l'état de la mise à jour :
 +  * A : fichier ajouté
 +  * D : fichier supprimé
 +  * U : fichier mis à jour sans problème
 +  * G : fichier modifié dans votre répertoire de travail et mis à jour sans conflit
 +  * C : fichier modifié dans votre répertoire de travail mais dont la mise à jour entre en conflit avec les modifications locales
 +===== Gérer ses modifications =====
 +Il est possible de lister les fichiers modifiés avec la commande : <code bash>svn status</code> 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 :
 +<code>svn diff sources/qetproject.h</code>
 +<code diff>
 +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
 +</code>
 +
 +Il est également possible de visualiser les différences sur les fichiers texte de manière conviviale avec [[http://www.caffeinated.me.uk/kompare/|Kompare]] et [[doc:showdiff|ce petit script]].
 +
 +Dernière alternative : <code bash>svn diff | colordiff | less -R</code>
 +
 +Autres commandes utiles :
 +  * svn export : même utilité que co / checkout, mais le résultat obtenu n'est pas un répertoire de travail Subversion (= il n'y a pas de sous-dossiers .svn) ; cela permet de faire une simple extraction d'une arborescence du dépôt
 +  * svn cat : prend en paramètre une liste de fichiers (y compris directement dans le dépôt) et affiche leur contenu sur la sortie standard.
 +  * svn revert : restaure l'état d'un fichier (les modifications locales sont perdues au profit de l'état du fichier dans le dépôt Subversion)
 +  * svn resolved : marque un fichier en conflit (état ''C'') comme étant résolu.
 +  * svn blame : permet de savoir, pour une liste de fichiers données, qui est l'auteur de chaque ligne.
 +  * svn merge : prend trois arguments, fait un diff entre les deux premiers et l'applique au troisième. À utiliser pour la gestion avancée des branches.
 +  * svn info : affiche des informations sur le répertoire de travail courant
 +  * svn help : apporte de l'aide sur une commande
 +===== 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 :
 +<code bash>svn ci -m "Correction d'un bug qui empechait la fermeture d'un projet ne comportant aucun schema."</code>
 +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 :
 +  * une zone pour écrire le message de commit
 +  * une zone listant les fichiers qui vont être commités
 +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).
 +<file>
 +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
 +</file>
 +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.
 +<code bash>
 +#!/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}"
 +</code>
Imprimer/exporter