Tortoise SVN, manuel utilisateur


partager des documents DOCUMENTS ASSOCIÉS

 

Tortoise SVN, manuel utilisateur

 

TortoiseSVN Un client Subversion pour Windows Version 1.6.2 Stefan Küng Lübbe Onken Simon Large TortoiseSVN: Un client Subversion pour Windows: Version 1.6.2 par Stefan Küng, Lübbe Onken, et Simon Large traduction: Jérémy Badier (jeremy.badier@gmail.com) Publié le 2009/04/04 16:56:05 (r16042) iii Table des matières Préface ........................................................................................................................... xi 1. Public ................................................................................................................. xi 2. Guide de lecture ................................................................................................... xi 3. TortoiseSVN est gratuit ! ...................................................................................... xii 4. Communauté ...................................................................................................... xii 5. Remerciements .................................................................................................... xii 6. Terminologie utilisée dans ce document ................................................................... xii 1. Introduction .................................................................................................................. 1 1.1. Qu'est-ce que TortoiseSVN ? ................................................................................ 1 1.2. L'historique de TortoiseSVN ................................................................................. 1 1.3. Les fonctionnalités de TortoiseSVN ....................................................................... 1 1.4. Installer TortoiseSVN .......................................................................................... 3 1.4.1. Configuration requise ................................................................................ 3 1.4.2. Installation .............................................................................................. 3 1.4.3. Packs de langue ....................................................................................... 3 1.4.4. Vérificateur d'orthographe .......................................................................... 3 2. Concepts de base du contrôle de version ........................................................................... 5 2.1. Le référentiel ..................................................................................................... 5 2.2. Modèles de gestion de version .............................................................................. 5 2.2.1. Le problème du partage de fichier ............................................................... 6 2.2.2. La solution Verrouiller-Modifier-Déverrouiller ............................................... 6 2.2.3. La solution Copier-Modifier-Fusionner ......................................................... 7 2.2.4. Que fait Subversion ? ................................................................................ 9 2.3. Subversion en action ........................................................................................... 9 2.3.1. Copies de travail ...................................................................................... 9 2.3.2. URL de référentiel .................................................................................. 11 2.3.3. Révisions .............................................................................................. 12 2.3.4. Comment les copies de travail suivent le référentiel ....................................... 13 2.4. Résumé ........................................................................................................... 14 3. Le référentiel .............................................................................................................. 15 3.1. Création de référentiel ........................................................................................ 15 3.1.1. Créer un référentiel avec le client de ligne de commande ................................ 15 3.1.2. Créer le référentiel avec TortoiseSVN ........................................................ 15 3.1.3. Accès local au référentiel ......................................................................... 16 3.1.4. Accéder à un référentiel situé dans un partage réseau ..................................... 16 3.1.5. Disposition du référentiel ......................................................................... 17 3.2. Sauvegarde de référentiel .................................................................................... 18 3.3. Scripts de hook côté serveur ............................................................................... 19 3.4. Liens d'extraction .............................................................................................. 19 3.5. Accéder au référentiel ........................................................................................ 20 3.6. Serveur basé sur Svnserve ................................................................................. 20 3.6.1. Introduction ........................................................................................... 20 3.6.2. Installer svnserve .................................................................................... 20 3.6.3. Exécuter svnserve ................................................................................... 21 3.6.4. Authentification de base avec svnserve ....................................................... 23 3.6.5. Sécuriser le serveur avec SASL ................................................................. 24 3.6.6. Authentification avec svn+ssh ................................................................... 25 3.6.7. Autorisation basée sur le chemin avec svnserve ............................................ 25 3.7. Serveur basé sur Apache .................................................................................... 26 3.7.1. Introduction ........................................................................................... 26 3.7.2. Installer Apache ..................................................................................... 26 3.7.3. Installer Subversion ................................................................................. 27 3.7.4. Configuration ......................................................................................... 28 3.7.5. Plusieurs référentiels ............................................................................... 30 3.7.6. Autorisation basée sur le chemin ............................................................... 30 TortoiseSVN iv 3.7.7. Authentification avec un domaine Windows ................................................. 31 3.7.8. Plusieurs sources d'authentification ............................................................ 32 3.7.9. Sécuriser le serveur avec SSL ................................................................... 33 3.7.10. Utiliser des certificats avec des hôtes SSL virtuels ....................................... 35 4. Guide d'utilisation quotidienne ....................................................................................... 37 4.1. Pour commencer ............................................................................................... 37 4.1.1. Recouvrement d'icônes ............................................................................ 37 4.1.2. Menus contextuels .................................................................................. 37 4.1.3. Glisser-déposer ....................................................................................... 40 4.1.4. Raccourcis communs ............................................................................... 40 4.1.5. Authentification ...................................................................................... 41 4.1.6. Maximiser les fenêtres ............................................................................. 42 4.2. Importer des données dans un référentiel ............................................................... 42 4.2.1. Importer ................................................................................................ 42 4.2.2. Importer en place .................................................................................... 43 4.2.3. Fichiers spéciaux .................................................................................... 44 4.3. Extraire une copie de travail ............................................................................... 44 4.3.1. Profondeur d'extraction ............................................................................ 45 4.4. Livrer vos changements au référentiel ................................................................... 47 4.4.1. La boîte de dialogue Livrer ...................................................................... 47 4.4.2. Listes de changements ............................................................................. 49 4.4.3. Exclude des éléments de la livraison .......................................................... 49 4.4.4. Commentaires de livraison ....................................................................... 49 4.4.5. Progression de la Livraison ....................................................................... 51 4.5. Mettre à jour votre copie de travail avec les changements des autres ............................ 52 4.6. Résoudre des conflits ......................................................................................... 54 4.6.1. Conflit de fichiers ................................................................................... 54 4.6.2. Conflits dans l'arborescence ...................................................................... 55 4.7. Obtenir des information sur le statut ..................................................................... 58 4.7.1. Recouvrement d'icônes ............................................................................ 58 4.7.2. Les colonnes de TortoiseSVN dans l'explorateur Windows .............................. 59 4.7.3. Statut local et distant ............................................................................... 60 4.7.4. Voir les différences ................................................................................. 62 4.8. Listes de changements ....................................................................................... 62 4.9. La boîte de dialogue de Journal de révision ............................................................ 64 4.9.1. Appeler la boîte de dialogue du Journal de révision ....................................... 65 4.9.2. La boîte de dialogue du Journal de révision ................................................. 65 4.9.3. Obtenir des informations supplémentaires .................................................... 66 4.9.4. Obtenir plus de commentaires ................................................................... 70 4.9.5. Révision de la Copie de Travail Courante .................................................... 71 4.9.6. Fonctionnalités de Suivi des Fusions .......................................................... 71 4.9.7. Changer le commentaire et l'auteur ............................................................ 72 4.9.8. Filtrer les commentaires ........................................................................... 73 4.9.9. Informations statistiques ........................................................................... 73 4.9.10. Mode hors ligne .................................................................................... 77 4.9.11. Refraichissement de l'affichage ................................................................ 77 4.10. Voir les différences .......................................................................................... 77 4.10.1. Différences de fichier ............................................................................ 78 4.10.2. Options de fins de ligne et d'espacement .................................................... 79 4.10.3. Comparer des répertoires ........................................................................ 79 4.10.4. Comparaison des images en utilisant TortoiseIDiff ...................................... 81 4.10.5. Outils de différenciation/fusion externes .................................................... 82 4.11. Ajouter de nouveaux fichiers et répertoires ........................................................... 82 4.12. Copier/Déplacer/Renommer des Fichiers et des Dossiers ......................................... 83 4.13. Ignorer des fichiers et des répertoires .................................................................. 84 4.13.1. L'utilisation des pattern matching dans la liste des fichier à ignorer .................. 85 4.14. Supprimer, déplacer et renommer ....................................................................... 86 4.14.1. Supprimer des fichiers et des dossiers ....................................................... 87 TortoiseSVN v 4.14.2. Déplacer des fichiers et des dossiers ......................................................... 88 4.14.3. Modifier la casse dans le nom d'un fichier. ................................................. 89 4.14.4. Gestion des conflits de nom de fichier. ...................................................... 89 4.14.5. Réparer les renommages de fichier ........................................................... 89 4.14.6. Supprimer les fichiers non versionnés ....................................................... 90 4.15. Annuler les changements .................................................................................. 90 4.16. Nettoyer ......................................................................................................... 91 4.17. Configuration des projets .................................................................................. 91 4.17.1. Propriétés Subversion ............................................................................ 92 4.17.2. Propriétés du projet TortoiseSVN ............................................................. 96 4.18. Eléments externes ............................................................................................ 97 4.18.1. Répertoires externes .............................................................................. 98 4.18.2. External Files ..................................................................................... 100 4.19. Brancher / Étiqueter ........................................................................................ 100 4.19.1. Créer une branche ou une étiquette ......................................................... 100 4.19.2. Extraire ou aller sur... ........................................................................... 102 4.20. Fusionner ..................................................................................................... 103 4.20.1. Fusionner une plage de révisions ............................................................ 104 4.20.2. Réintégrer une branche ......................................................................... 106 4.20.3. Fusionner deux arbres différents ............................................................. 107 4.20.4. Options de fusion ................................................................................ 108 4.20.5. Prévisualiser les résultats de la fusion ...................................................... 109 4.20.6. Suivi des fusions ................................................................................. 110 4.20.7. Gérer les conflits durant la fusion. .......................................................... 110 4.20.8. Fusionner une branche complétée ........................................................... 111 4.20.9. Branche de maintenance d'une fonctionnalité ............................................ 112 4.21. Verrouiller .................................................................................................... 112 4.21.1. Comment le verrouillage fonctionne dans Subversion ................................. 113 4.21.2. Obtenir un verrou ................................................................................ 113 4.21.3. Relâcher un verrou .............................................................................. 114 4.21.4. Vérifier le statut des verrous .................................................................. 115 4.21.5. Mettre les fichiers non verrouillés en Lecture seule .................................... 115 4.21.6. Les scripts hook de verrouillage ............................................................. 116 4.22. Créer et appliquer des patches .......................................................................... 116 4.22.1. Créer un patch .................................................................................... 116 4.22.2. Appliquer un patch .............................................................................. 117 4.23. Qui a changé quelle ligne ? .............................................................................. 117 4.23.1. Condamner pour les fichiers .................................................................. 118 4.23.2. Condamner les différences .................................................................... 120 4.24. l'explorateur de référentiel ............................................................................... 120 4.25. Graphiques de révision ................................................................................... 123 4.25.1. Graphiques des révisions ...................................................................... 124 4.25.2. Changer l'affichage .............................................................................. 124 4.25.3. Utiliser le Graphique de révisions ........................................................... 126 4.25.4. Refraichissement de l'affichage .............................................................. 127 4.25.5. Pruning Trees ..................................................................................... 127 4.26. Exporter une copie de travail Subversion ............................................................ 127 4.26.1. Retirer une copie de travail du contrôle de version ..................................... 129 4.27. Relocaliser une copie de travail ........................................................................ 129 4.28. Intégration avec des systèmes de bug tracking / traqueurs d'incidents ........................ 130 4.28.1. Ajouter des numéros de bugs aux messages de log ..................................... 130 4.28.2. Récupérer des Informations depuis un Traqueur de Bug .............................. 133 4.29. Intégration avec des explorateur de référentiel de type web. ................................... 134 4.30. Configuration de TortoiseSVN ......................................................................... 135 4.30.1. Configuration générale ......................................................................... 135 4.30.2. Options du Graphe des Révisions ........................................................... 143 4.30.3. Configuration du recouvrement d'icônes ................................................... 145 4.30.4. Configuration du réseau ........................................................................ 148 TortoiseSVN vi 4.30.5. Réglages des programmes externes ......................................................... 150 4.30.6. Configuration des données sauvegardées .................................................. 153 4.30.7. Mise en Cache des messages de log ........................................................ 154 4.30.8. Scripts hook côté client ........................................................................ 157 4.30.9. Configuration de TortoiseBlame ............................................................. 161 4.30.10. Réglages dans le registre ..................................................................... 161 4.30.11. Dossiers de travail de Subversion .......................................................... 163 4.31. Étape Finale .................................................................................................. 163 5. Le programme SubWCRev .......................................................................................... 164 5.1. La ligne de commande SubWCRev ..................................................................... 164 5.2. Substitution de mot-clés .................................................................................... 165 5.3. Exemple de mot-clé ......................................................................................... 165 5.4. Interface COM ................................................................................................ 166 A. Foire aux questions (FAQ) .......................................................................................... 169 B. Comment faire pour... ................................................................................................ 170 B.1. Déplacer/copier beaucoup de fichiers en une fois .................................................. 170 B.2. Forcer les utilisateurs à entrer un commentaire ..................................................... 170 B.2.1. Script hook sur le serveur ...................................................................... 170 B.2.2. Propriétés de projet ............................................................................... 171 B.3. Mettre à jour les fichiers sélectionnés à partir du référentiel ..................................... 171 B.4. Annuler des révisions dans le référentiel ............................................................. 171 B.4.1. Utiliser la boîte de dialogue du journal de révision ...................................... 171 B.4.2. Utiliser la boîte de dialogue fusionner ...................................................... 171 B.4.3. Utiliser svndumpfilter ..................................................................... 172 B.5. Compare deux révisions d'un fichier ou d'un répertoire ........................................... 172 B.6. Inclure un sous-projet commun .......................................................................... 172 B.6.1. Utiliser svn:externals ............................................................................. 172 B.6.2. Utiliser une copie de travail nichée .......................................................... 173 B.6.3. Utiliser un emplacement relatif ............................................................... 173 B.7. Créer un raccourci vers un référentiel ................................................................. 174 B.8. Ignorer les fichiers déjà versionnés ..................................................................... 174 B.9. Retirer une copie de travail du contrôle de version ................................................ 174 B.10. Retirer une copie de travail ............................................................................. 174 C. Trucs Utiles Pour Les Administrateurs .......................................................................... 175 C.1. Déployer TortoiseSVN via les stratégies de groupe ................................................ 175 C.2. Rediriger la vérification de mise à niveau ............................................................ 175 C.3. Mettre la variable d'environnement SVN_ASP_DOT_NET_HACK ............................. 176 C.4. Désactiver les entrées du menu contextuel ........................................................... 176 D. Automatiser TortoiseSVN ........................................................................................... 178 D.1. Commandes de TortoiseSVN ............................................................................ 178 D.2. Commandes de TortoiseIDiff ............................................................................ 181 E. Référence croisée de l'interface en ligne de commande ..................................................... 183 E.1. Conventions et règles de base ............................................................................ 183 E.2. Commandes de TortoiseSVN ............................................................................. 183 E.2.1. Extraire ............................................................................................... 183 E.2.2. Mettre à jour ........................................................................................ 183 E.2.3. Mettre à jour à la révision ...................................................................... 184 E.2.4. Livrer ................................................................................................. 184 E.2.5. Voir les différences ............................................................................... 184 E.2.6. Voir le journal ..................................................................................... 185 E.2.7. Vérifier les modifications ....................................................................... 185 E.2.8. Graphique de révision ............................................................................ 185 E.2.9. Explorateur de référentiel ....................................................................... 185 E.2.10. Éditer les conflits ................................................................................ 186 E.2.11. Résolu ............................................................................................... 186 E.2.12. Renommer ......................................................................................... 186 E.2.13. Supprimer .......................................................................................... 186 E.2.14. Revenir en arrière ............................................................................... 186 TortoiseSVN vii E.2.15. Nettoyer ............................................................................................ 186 E.2.16. Obtenir un verrou ................................................................................ 186 E.2.17. Relâcher un verrou .............................................................................. 187 E.2.18. Branche/Etiquette ................................................................................ 187 E.2.19. Aller sur... ......................................................................................... 187 E.2.20. Fusionner ........................................................................................... 187 E.2.21. Exporter ............................................................................................ 187 E.2.22. Relocaliser ......................................................................................... 188 E.2.23. Créer un référentiel ici ......................................................................... 188 E.2.24. Ajouter .............................................................................................. 188 E.2.25. Importer ............................................................................................ 188 E.2.26. Condamner ........................................................................................ 188 E.2.27. Ajouter à la liste des ignorés ................................................................. 188 E.2.28. Créer un patch .................................................................................... 188 E.2.29. Appliquer un patch .............................................................................. 188 F. Détails de l'implémentation .......................................................................................... 189 F.1. Recouvrement d'icônes ..................................................................................... 189 G. Sécuriser Svnserve grâce à SSH ................................................................................... 191 G.1. Configurer un Serveur Liunx ............................................................................ 191 G.2. Configurer un Serveur Windows ........................................................................ 191 G.3. Client SSH à utiliser avec TortoiseSVN .............................................................. 192 G.4. Création des certificats OpenSSH ...................................................................... 192 G.4.1. Créer des clés en utilisant ssh-keygen ....................................................... 192 G.4.2. Créer des clés en utilisant PuTTYgen ....................................................... 192 G.5. Tester en utilisant PuTTY ................................................................................ 192 G.6. Tester SSH avec TortoiseSVN .......................................................................... 193 G.7. Variantes de Configuration SSH ........................................................................ 194 6. IBugtraqProvider interface ........................................................................................... 195 6.1. The IBugtraqProvider interface .......................................................................... 195 6.2. The IBugtraqProvider2 interface ......................................................................... 196 Glossaire ...................................................................................................................... 199 Index ........................................................................................................................... 203 viii Liste des illustrations 2.1. Un système Client/Serveur typique ................................................................................ 5 2.2. Le problème à éviter ................................................................................................... 6 2.3. La solution Verrouiller-Modifier-Déverrouiller ................................................................. 7 2.4. La solution Copier-Modifier-Fusionner ........................................................................... 8 2.5. ...Suite du modèle Copier-Modifier-Fusionner .................................................................. 8 2.6. Le système de fichiers du référentiel ............................................................................. 10 2.7. Le référentiel ............................................................................................................ 12 3.1. Le menu TortoiseSVN pour les dossiers non versionnés ................................................... 15 4.1. L'Explorateur montrant le recouvrement d'icônes ............................................................. 37 4.2. Menu contextuel pour un répertoire sous contrôle de version ............................................. 38 4.3. Menu fichier de l'Explorateur pour un raccourci dans un répertoire non versionné .................. 39 4.4. Menu pour un répertoire sous contrôle de version lors d'un glisser-déplacer avec le bouton droit .............................................................................................................................. 40 4.5. Boîte de dialogue d'authentification .............................................................................. 41 4.6. Le boîte de dialogue Importer ..................................................................................... 43 4.7. La boîte de dialogue Extraire ...................................................................................... 45 4.8. La boîte de dialogue Livrer ......................................................................................... 47 4.9. Le vérificateur d'orthographe de la boîte de dialogue Livrer .............................................. 50 4.10. La boîte de dialogue de progression montrant une livraison en cours ................................. 51 4.11. la boîte de dialogue de progression montrant une mise à jour terminée ............................... 52 4.12. L'Explorateur montrant le recouvrement d'icônes ........................................................... 58 4.13. Vérifier les modifications .......................................................................................... 60 4.14. Fenêtre de livraison avec les listes des modifications ...................................................... 63 4.15. La boîte de dialogue de Journal de révision .................................................................. 65 4.16. Le parreau supérieur de la boîte de dialogue du Journal de révision avec le menu contextuel ..................................................................................................................................... 66 4.17. Menu contextuel du panneau supérieur avec 2 révisions sélectionnées ................................ 68 4.18. Le panneau inférieur de la boîte de dialogue du Journal avec le menu contextuel .................. 69 4.19. The Log Dialog Showing Merge Tracking Revisions ...................................................... 72 4.20. Histogramme de livraisons par auteur .......................................................................... 74 4.21. Camembert de livraisons par auteur ............................................................................ 75 4.22. Graphique de livraisons par date ................................................................................ 76 4.23. Go Offline Dialog ................................................................................................... 77 4.24. La boîte de dialogue Comparer les révisions ................................................................. 80 4.25. Le visualiseur de différences d'images ......................................................................... 81 4.26. Menu contextuel de l'explorateur pour les fichiers non versionnés ..................................... 83 4.27. Menu pour un répertoire sous contrôle de version lors d'un glisser-déplacer avec le bouton droit .............................................................................................................................. 84 4.28. Menu contextuel de l'explorateur pour les fichiers non versionnés ..................................... 85 4.29. Menu contextuel de l'explorateur pour les fichiers non versionnés ..................................... 87 4.30. La boîte de dialogue Revenir en arrière ....................................................................... 90 4.31. Page de propriétés de l'explorateur, onglet Subversion .................................................... 92 4.32. Page de propriété de subversion ................................................................................. 93 4.33. Ajouter des propriétés .............................................................................................. 94 4.34. La boîte de dialogue Branche/Etiquette ...................................................................... 101 4.35. La boîte de dialogue Aller sur .................................................................................. 103 4.36. Assistant de fusion - Sélectionner une gamme de révisions ............................................ 105 4.37. Assistant de fusion - Réintégration ............................................................................ 107 4.38. Assitant de de fusion - Fusion d'arborescence .............................................................. 108 4.39. La boîte de dialogue de conflit de fusion .................................................................... 111 4.40. La boîte de dialogue de fusion ................................................................................. 112 4.41. La boîte de dialogue Verrouiller ............................................................................... 114 4.42. La boîte de dialogue Vérifier les modifications ............................................................ 115 4.43. La boîte de dialogue Créer un patch .......................................................................... 116 4.44. La boîte de dialogue Condamner / Annoter ................................................................. 118 TortoiseSVN ix 4.45. TortoiseBlame ....................................................................................................... 119 4.46. l'explorateur de référentiel ....................................................................................... 121 4.47. Un graphique de révision ........................................................................................ 123 4.48. La fenêtre extraction-depuis-une-URL ....................................................................... 128 4.49. La boîte de dialogue Relocaliser ............................................................................... 129 4.50. Exemple de fenêtre de bug tracker ............................................................................ 134 4.51. La boîte de dialogue Configuration, page Général ........................................................ 136 4.52. La boîte de dialogue de Configuration, Page Menu Contextuel ....................................... 138 4.53. La boîte de dialogue Configuration, page Boîtes de dialogue 1 ....................................... 139 4.54. La boîte de dialogue Configuration, page Boîtes de dialogue 2 ....................................... 141 4.55. La boîte de dialogue Configuration, page Couleurs ....................................................... 142 4.56. The Settings Dialog, Revision Graph Page ................................................................. 143 4.57. The Settings Dialog, Revision Graph Colors Page ........................................................ 144 4.58. La Boîte de Dialogue Configuration, Page des Icônes de Recouvrement ........................... 145 4.59. La boîte de dialogue Configuration, page Ensemble d'icônes .......................................... 148 4.60. La boîte de dialogue Configuration, page Réseau ......................................................... 149 4.61. La boîte de dialogue Configuration, page Visualisateur de différence ............................... 150 4.62. La boîte de dialogue Configuration, Boîte de dialogue Comparaison/fusion avancée ............ 152 4.63. La boîte de dialogue Configuration, Page Données sauvegardées ..................................... 153 4.64. La boîte de dialogue de Configuration, Page de Mise en Cache des Logs .......................... 154 4.65. La Fenêtre de propriétés, Statistiques d'Utilisation de la Mémoire Cache ........................... 156 4.66. La boîte de dialogue Configuration, page Scripts hook .................................................. 157 4.67. La fenêtre de paramétrage, configuration des scripts de hook .......................................... 158 4.68. La Fenêtre de Propriétés, Page d'Intégration d'un Bug Tracker ........................................ 160 4.69. La boîte de dialogue ce configuration, page de bannissement. ......................................... 161 C.1. La boîte de dialogue Mettre à jour ............................................................................. 175 x Liste des tableaux 2.1. URL d'accès au référentiels ......................................................................................... 11 3.1. Réglages du httpd.conf d'Apache .......................................................................... 28 5.1. Liste des commutateurs de ligne de commande disponibles ............................................. 164 5.2. Liste des commutateurs de ligne de commande disponibles ............................................. 165 5.3. Les méthodes COM/automation sont supportées ............................................................ 166 C.1. Entrées du menu et leurs valeurs ............................................................................... 176 D.1. Liste des commandes et des options disponibles ........................................................... 179 D.2. Liste des options disponibles .................................................................................... 181 xi Préface ? Travaillez-vous dans une équipe ? ? Vous est-il jamais arrivé de travailler sur un fichier, et quelqu'un d'autre travaillait sur le même fichier au même moment ? Avez-vous perdu vos changements de ce fichier à cause de cela ? ? Avez-vous jamais sauvegardé un fichier, et ensuite voulu annuler les changements effectués ? Avez- vous jamais souhaité voir à quoi ressemblait un fichier il y a quelques temps ? ? Avez-vous jamais trouvé un bug dans votre projet et voulu savoir quand ce bug a été introduit dans vos fichiers ? Si vous avez répondu « oui » à l'une de ces questions, alors TortoiseSVN est fait pour vous ! Continuez seulement cette lecture pour découvrir comment TortoiseSVN peut vous aider dans votre travail. Ce n'est pas si difficile. 1. Public Ce manuel est écrit pour les gens initiés à l'informatique qui veulent utiliser Subversion pour gérer leurs données, mais qui ne sont pas à l'aise pour utiliser le client en ligne de commande pour ce faire. Puisque TortoiseSVN est une extension du shell Windows, il est sous-entendu que l'utilisateur est familiarisé avec l'explorateur Windows et sait comment l'utiliser. 2. Guide de lecture Cette Préface donne quelques explications au sujet du projet TortoiseSVN, de la communauté de personnes qui travaille dessus et des conditions de licence pour l'utiliser et le distribuer. Cette Chapitre 1, Introduction explique ce qu'est TortoiseSVN, ce qu'il fait, ses origines et les bases pour l'installer sur votre PC. Dans Chapitre 2, Concepts de base du contrôle de version nous donnons une courte introduction au système de contrôle de révision Subversion qui est à la base de TortoiseSVN. C'est emprunté à la documentation du projet Subversion et cela explique les différentes approches au contrôle de version et comment Subversion fonctionne. The chapter on Chapitre 3, Le référentiel explains how to set up a local repository, which is useful for testing Subversion and TortoiseSVN using a single PC. It also explains a bit about repository administration which is also relevant to repositories located on a server. There is also a section here on how to setup a server if you need one. La section Chapitre 4, Guide d'utilisation quotidienne est la plus importante puisqu'elle explique toutes les fonctionnalités principales de TortoiseSVN et comment les utiliser. Elle est sous forme de tutoriel qui indique comment extraire une copie de travail, la modifier, livrer les changements effectués, etc. Il traite de sujets de plus en plus avancés. Chapitre 5, Le programme SubWCRev est un programme installé avec TortoiseSVN permettant d'extraire des informations de votre copie de travail et de les écrire dans un fichier. Ce qui est utile pour ajouter des informations de compilation à vos projets. La section Annexe B, Comment faire pour... répond à quelques questions courantes concernant les tâches qui ne sont pas expliquées ailleurs. Préface xii La section Annexe D, Automatiser TortoiseSVN montre comment les boîtes de dialogue de TortoiseSVN peuvent être appelées en ligne de commande. C'est utile pour faire des scripts interactifs. La Annexe E, Référence croisée de l'interface en ligne de commande fait le lien entre les commandes de TortoiseSVN et leurs équivalents en ligne de commande du client Subversion svn.exe. 3. TortoiseSVN est gratuit ! TortoiseSVN est gratuit. Vous n'avez pas à payer pour l'avoir, et vous pouvez l'utiliser comme vous le souhaitez. Il est développé sous licence GP (GPL). TortoiseSVN is an Open Source project. That means you have full read access to the source code of this program. You can browse it on this link http://tortoisesvn.tigris.org/svn/tortoisesvn/. You will be prompted to enter username and password. The username is guest, and the password must be left blank. The most recent version (where we're currently working) is located under /trunk/, and the released versions are located under /tags/. 4. Communauté Both TortoiseSVN and Subversion are developed by a community of people who are working on those projects. They come from different countries all over the world and work together to create wonderful programs. 5. Remerciements Tim Kemp pour avoir fondé le projet TortoiseSVN Stefan Küng pour le travail difficile pour que TortoiseSVN devienne ce qu'il est maintenant Lübbe Onken pour les belles icônes, le logo, la chasse aux bugs, la traduction et le soin apporté à la documentation Simon Large pour aider à documenter et chasser les bugs Le manuel de Subversion pour l'introduction grandiose à Subversion et son chapitre 2 que nous avons copié ici Le projet Tigris Style pour certains des styles réutilisés dans cette documentation Nos contributeurs pour les patches, les rapports de bug et les nouvelles idées, et pour avoir aidé les autres en répondant aux questions sur notre mailing list. Nos donateurs pour les nombreuses heures de bonheur avec la musique qu'ils nous ont envoyé 6. Terminologie utilisée dans ce document Pour rendre la lecture des documents plus facile, les noms de tous les écrans et des menus de TortoiseSVN sont marqués dans une police différente. La boîte de dialogue Journal par exemple. Un choix de menu est indiqué par une flèche. TortoiseSVN ? Voir le journal veut dire : sélectionnez Voir le journal à partir du menu contextuel TortoiseSVN. Quand un menu contextuel local apparaît dans une des boîtes de dialogue de TortoiseSVN, on le montre comme cela : Menu contextuel ? Enregistrer sous... Préface xiii Les boutons de l'interface utilisateur sont indiqués comme ceci : Appuyer sur OK pour continuer. Les actions utilisateur sont indiquées en utilisant une police en gras. Alt+A : appuyez sur la touche A en maintenant la touche Alt de votre clavier enfoncée. Glisser click droit : appuyez sur le bouton droit de la souris et en le maintenant enfoncé faites glisser les éléments vers le nouvel emplacement. La sortie système et l'entrée au clavier sont indiquées aussi avec une police différente. Important Les notes importantes sont marquées avec une icône. Astuce Astuces pour vous rendre la vie plus facile. Attention Endroits où vous devez faire attention à ce que vous faites. Avertissement Quand un soin extrême doit être pris, une corruption de données ou d'autres choses désagréables peuvent arriver si ces avertissements sont ignorés. 1 Chapitre 1. Introduction Le contrôle de version est l'art de gérer les changements de l'information. Cela a longtemps été un outil critique pour les programmeurs, qui passent typiquement leur temps à faire de petites modifications au logiciel et à défaire ensuite ces changements le lendemain. Imaginez une équipe de ces programmeurs travaillant concurremment - et peut-être même simultanément sur les même fichiers ! - et vous pouvez voir pourquoi un bon système est nécessaire pour gérer le chaos potentiel. 1.1. Qu'est-ce que TortoiseSVN ? TortoiseSVN est un client open-source gratuit pour le système de contrôle de version Subversion. C'est- à-dire TortoiseSVN gère des fichiers et des répertoires à travers le temps. Les fichiers sont stockés dans un référentiel central. Le référentiel ressemble beaucoup à un serveur de fichiers ordinaire, sauf qu'il se rappelle chaque changement jamais fait à vos fichiers et répertoires. Cela vous permet de récupérer les versions précédentes de vos fichiers et examiner l'historique de comment et quand vos données ont changé. C'est pourquoi beaucoup de personnes pensent que Subversion et les systèmes de contrôle de version en général sont une sorte de « machine à remonter le temps ». Quelques systèmes de contrôle de version sont aussi des systèmes de gestion de configuration logicielle (GCL). Ces systèmes sont spécifiquement conçus pour gérer des arborescences de code source et ont beaucoup de fonctionnalités spécifiques au développement de logiciel - comme la compréhension de langages de programmation en natif, ou des outils d'approvisionnement pour construire le logiciel. Subversion, cependant, n'est pas un de ces systèmes ; c'est un système général qui peut être utilisé pour gérer n'importe quelle collection de fichiers, y compris du code source. 1.2. L'historique de TortoiseSVN En 2002, Tim Kemp a constaté que Subversion était un très bon système de contrôle de version, mais il lui manquait un bon client avec une interface graphique. L'idée d'un client Subversion comme une intégration du shell de Windows a été inspirée par le client semblable pour CVS nommé TortoiseCVS. Tim a étudié le code source de TortoiseCVS et l'a utilisé comme base pour TortoiseSVN. Il a alors commencé le projet, a enregistré le domaine tortoisesvn.org et a mis le code source en ligne. Pendant ce temps, Stefan Küng cherchait un bon système de contrôle de version gratuit et a trouvé Subversion et le source de TortoiseSVN. Puisque TortoiseSVN n'était toujours pas prêt à l'emploi il a alors rejoint le projet et a commencé à programmer. Bientôt il a réécrit la plupart du code existant et a commencé à ajouter des commandes et des fonctionnalités, jusqu'au point où rien n'est resté du code original. Comme Subversion est devenu plus stable, il a attiré de plus en plus d'utilisateurs qui ont aussi commencé à utiliser TortoiseSVN comme leur client Subversion. La base utilisateur a grandi rapidement (et grandit toujours chaque jour). C'est à ce moment que Lübbe Onken s'est proposé d'aider avec des icônes agréables et un logo pour TortoiseSVN. Et il s'occupe du site Web et gère la traduction. 1.3. Les fonctionnalités de TortoiseSVN Qu'est-ce qui fait de TortoiseSVN un si bon client Subversion ? Voici une courte liste des fonctionnalités. Intégration dans le shell TortoiseSVN s'intègre uniformément dans le shell Windows (c'est-à-dire l'explorateur). Cela signifie que vous pouvez continuer à travailler avec les outils avec lesquels vous êtes déjà familiers. Et vous n'avez pas à changer d'application à chaque fois que vous avez besoin des fonctionnalités du contrôle de version ! Introduction 2 Et vous n'êtes même pas obligés d'utiliser l'explorateur Windows. Les menus contextuels de TortoiseSVN marchent dans beaucoup d'autres gestionnaires de fichiers et dans la boîte de dialogue Fichier/Ouvrir qui est commune à la plupart des applications Windows standards. Vous devriez, cependant, tenir compte que TortoiseSVN est intentionnellement développé comme extension pour l'explorateur Windows. Ainsi il est possible que dans d'autres applications l'intégration ne soit pas aussi complète et le recouvrement d'icônes peut ne pas s'afficher par exemple. Recouvrement d'icônes Le statut de chaque fichier et de chaque répertoire versionnés est indiqué par des petites icônes de recouvrement. De cette façon vous pouvez voir tout de suite quel est le statut de votre copie de travail. Accès facile aux commandes de Subversion Toutes les commandes de Subversion sont disponibles à partir du menu contextuel de l'explorateur. TortoiseSVN y ajoute son propre sous-menu. Puisque TortoiseSVN est un client Subversion, nous voudrions aussi vous montrer certaines des fonctionnalités de Subversion : Répertoires versionnés CVS suit seulement à la trace l'histoire de fichiers individuels, mais Subversion met en oeuvre un système de fichiers « virtuel » versionné qui suit à la trace les changements sur des arborescences entières à travers le temps. Les fichiers et les répertoires sont versionnés. En conséquence, il y a du coté client de vraies commandes déplacer et copier qui fonctionnent sur les fichiers et les répertoires. Livraisons atomiques Une livraison va sur le référentiel complètement, ou pas du tout. Cela permet aux développeurs de construire et livrer les changements comme des morceaux logiques. Metadonnées versionnées Chaque fichier et chaque répertoire a un jeu invisible de « propriétés » attachées. Vous pouvez inventer et stocker n'importe quelle paire arbitraire clef/valeur que vous souhaitez. Les propriétés sont versionnées dans le temps, comme le contenu du fichier. Choix de couches réseau Subversion a une notion abstraite de l'accès au référentiel, le rendant facile à mettre en oeuvre à travers de nouveaux mécanismes de réseau. Le serveur réseau « avancé » de Subversion est un module pour le serveur Web Apache, qui utilise une variante de HTTP appelée WebDAV/DeltaV. Cela donne un grand avantage à Subversion en stabilité et en interopérabilité et fournit des différentes fonctionnalités clés gratuitement : authentification, autorisation, compression de fil et navigation de référentiel, par exemple. Un processus de serveur Subversion plus petit, autonome est aussi disponible. Ce serveur utilise un protocole personnalisé qui peut être facilement tunnelé par ssh. Gestion cohérente des données Subversion exprime les différences de fichier en utilisant un algorithme de différenciation binaire, qui travaille identiquement sur les fichiers textes (lisibles par l'homme) et les fichiers binaires (illisibles par l'homme). Les deux types de fichiers sont stockés également compressés dans le référentiel, et les différences sont transmises dans les deux directions à travers le réseau. Embranchements et étiquetages efficaces Le coût de l'embranchement et de l'étiquetage n'a pas besoin d'être proportionnel à la taille de projet. Subversion crée des branches et des étiquettes en copiant simplement le projet, en utilisant un mécanisme semblable à un lien dur. Ainsi ces opérations prennent seulement un temps très petit, constant et un espace très petit dans le référentiel. Hackabilité Subversion n'a aucun bagage historique ; il est mis en oeuvre comme une collection de bibliothèques C partagées avec des API bien définies. Cela fait que Subversion est extrêmement maintenable et utilisable par d'autres applications et d'autres langages. Introduction 3 1.4. Installer TortoiseSVN 1.4.1. Configuration requise TortoiseSVN fonctionne sur Win2000 SP2, WinXP ou supérieur. Windows 98, Windows ME et Windows NT4 ne sont plus supportés depuis TortoiseSVN 1.2.0, mais vous pouvez toujours télécharger les versions précédentes si vous en avez vraiment besoin. Si vous rencontrez des problèmes pendant ou après l'installation de TortoiseSVN, veuiller d'abord vous référer à Annexe A, Foire aux questions (FAQ). 1.4.2. Installation TortoiseSVN est livré avec un programme d'installation facile à utiliser. Double cliquez sur le fichier d'installation et suivez les indications. Le programme d'installation s'occupera du reste. Important Vous devez être administrateur pour installer TortoiseSVN. 1.4.3. Packs de langue L'interface utilisateur de TortoiseSVN a été traduite dans beaucoup de langues différentes, donc vous devez être capables de télécharger un pack de langue qui réponde à vos besoins. Vous pouvez trouver les packs de langue sur notre page du statut des traductions [http://tortoisesvn.net/translation_status]. Et s'il n'y a encore de pack de langue disponible, pourquoi ne pas rejoindre l'équipe et soumettre votre propre traduction ;-) Chaque pack de langue est empaqueté comme un installeur .exe. Exécutez juste le programme d'installation et suivez les instructions. La prochaine fois que vous redémarrez, la traduction sera disponible. 1.4.4. Vérificateur d'orthographe TortoiseSVN inclut un vérificateur d'orthographe qui vous permet de vérifier vos commentaires de livraison. C'est particulièrement utile si le la langue du projet n'est pas votre langue maternelle. Le vérificateur d'orthographe utilise les mêmes fichiers de dictionnaire que OpenOffice [http:// openoffice.org] et Mozilla [http://mozilla.org]. L'installeur ajoute automatiquement les dictionnaires d'anglais américains et britanniques. Si vous voulez d'autres langues, l'option la plus facile est d'installer simplement un des packs de langue de TortoiseSVN. Cela installera les fichiers de dictionnaire appropriés en même temps que l'interface utilisateur TortoiseSVN locale. La prochaine fois que vous redémarrez, le dictionnaire sera disponible aussi. Ou vous pouvez installer les dictionnaires vous-même. Si vous avez OpenOffice ou Mozilla installés, vous pouvez copier ces dictionnaires, qui se trouvent dans les dossiers d'installation de ces applications. Autrement, vous devez télécharger les fichiers de dictionnaire requis depuis http:// wiki.services.openoffice.org/wiki/Dictionaries Une fois que vous avez les fichiers de dictionnaire, vous devez probablement les renommer pour que les noms de fichier contiennent seulement les caractères locaux. Exemple : ? fr_FR.aff ? fr_FR.dic Introduction 4 Ensuite copiez les simplement dans le sous-dossier bin du dossier d'installation de TortoiseSVN. Normalement ce sera C:\Program Files\TortoiseSVN\bin. Si vous ne voulez pas encombrer le sous-dossier bin, vous pouvez placer vos fichiers de vérification d'orthographe dans C:\Program Files\TortoiseSVN\Languages à la place. Si ce dossier n'est pas là, vous devez le créer d'abord. La prochaine fois vous démarrez TortoiseSVN, le vérificateur d'orthographe sera disponible. Si vous installez plusieurs dictionnaires, TortoiseSVN utilise ces règles pour choisir lequel utiliser. 1. Vérifier le réglage tsvn:projectlanguage. Référez-vous à Section 4.17, « Configuration des projets » pour des informations concernant les propriétés de projet. 2. Si aucune langue de projet n'est indiquée, ou si cette langue n'est pas installée, essayer la langue correspondant aux options régionales de Windows. 3. Si les options régionales exactes de Windows ne marchent pas, essayer la langue de « Base », i.e. de_CH (Allemand Suisse) devient de_DE (Allemand). 4. Si aucune des règles ci-dessus ne marche, alors la langue par défaut est l'anglais, qui est inclus avec l'installation standard. 5 Chapitre 2. Concepts de base du contrôle de version Ce chapitre est une version légèrement modifiée du même chapitre dans le manuel de Subversion. Une version en ligne du manuel de Subversion est disponible ici : http://svnbook.red-bean.com/. Ce chapitre est une introduction courte, occasionnelle à Subversion. Si le contrôle de version est nouveau pour vous, ce chapitre est certainement pour vous. Nous commençons par une discussion sur les concepts généraux du contrôle de version, nous ferons notre chemin vers les idées spécifiques derrière Subversion et nous montrons quelques exemples simples de Subversion en utilisation. Bien que les exemples dans ce chapitre montrent des gens partageant des collections de code source de programme, gardez à l'esprit que Subversion peut gérer n'importe quel sorte de collection de fichier - il n'est pas limité à l'aide de programmeurs. 2.1. Le référentiel Subversion est un système centralisé pour partager l'information. Son coeur est un référentiel, qui est un dépôt central de données. Le référentiel stocke l'information sous forme d'une arborescence de système de fichiers - une hiérarchie typique de fichiers et de répertoires. N'importe quel nombre de clients se connecte au référentiel et ensuite lit ou écrit ces fichiers. En écrivant des données, un client rend l'information disponible aux autres ; en lisant des données, le client reçoit l'information des autres. Figure 2.1. Un système Client/Serveur typique Alors pourquoi est-ce si intéressant ? Jusqu'ici, cela ressemble à la définition d'un serveur de fichiers typique. Et en effet, le référentiel est une sorte de serveur de fichiers, mais il n'est pas de votre genre habituel. Ce qui rend le référentiel de Subversion spécial est qu'il se rappelle de chaque changement jamais écrit : chaque changement de chaque fichier, et même les changements de l'arborescence des répertoires elle-même, comme l'ajout, la suppression et le réarrangement des fichiers et des répertoires. Quand un client lit des données du référentiel, il voit normalement seulement la dernière version de l'arborescence. Mais le client peut aussi voir les états précédents. Par exemple, un client peut poser des questions historiques comme, « que contenait ce répertoire mercredi dernier ? », ou « qui sont les dernières personnes à avoir changé ce fichier et quels changements ont-elles fait ? » C'est ce genre de questions qui sont au coeur de n'importe quel système de contrôle de version : des systèmes qui sont conçus pour enregistrer et suivre les changements des données au cours du temps. 2.2. Modèles de gestion de version Tous les systèmes de contrôle de version doivent résoudre le même problème fondamental : comment le système permettra-t-il aux utilisateurs de partager l'information, mais les empêchera accidentellement de Concepts de base du contrôle de version 6 se marcher sur les pieds ? Il est trop facile pour les utilisateurs d'écraser accidentellement les changements de chacun sur le référentiel. 2.2.1. Le problème du partage de fichier Considérons ce scénario : supposons que nous avons deux collaborateurs, Harry et Sally. Ils décident chacun d'éditer le même fichier du référentiel en même temps. Si Harry sauvegarde ses changements sur le référentiel d'abord, il est possible qu'ensuite (quelques moments plus tard) Sally puisse accidentellement les écraser avec sa propre nouvelle version du fichier. Tandis que la version d'Harry du fichier ne sera pas perdue pour toujours (parce que le système se rappelle chaque changement), les changements qu'Harry a fait ne seront pas dans la version plus récente du fichier de Sally, parce qu'elle n'a jamais vu les changements d'Harry pour commencer. Le travail d'Harry est effectivement encore perdu - ou du moins manquant de la dernière version du fichier - et probablement par accident. C'est certainement une situation que nous voulons éviter! Figure 2.2. Le problème à éviter 2.2.2. La solution Verrouiller-Modifier-Déverrouiller Beaucoup de systèmes de contrôle de version utilisent le modèle verrouiller-modifier-déverrouiller pour aborder ce problème, qui est une solution très simple. Dans un tel système, le référentiel ne permet qu'à une seule personne de changer un fichier à la fois. D'abord Harry doit verrouiller le fichier avant qu'il ne puisse commencer à y faire des changements. Le verrouillage d'un fichier s'apparente alors à l'emprunt d'un livre dans une bibliothèque ; si Harry a verrouillé un fichier, alors Sally ne peut pas le modifier. Si elle essaye de verrouiller le fichier, le référentiel refusera la requête. Tout qu'elle peut faire est lire le fichier et attendre qu'Harry finisse ses changements et relâche le verrou. Dès qu'Harry déverrouille le fichier, son tour est fini, et Sally peut alors prendre son tour en le verrouillant et en y apportant ses modifications. Concepts de base du contrôle de version 7 Figure 2.3. La solution Verrouiller-Modifier-Déverrouiller Le problème avec le modèle "verrouiller-modifier-déverrouiller" est qu'il est un peu restrictif et devient souvent un barrage pour les utilisateurs : ? Le verrouillage peut causer des problèmes administratifs. Parfois Harry verrouillera un fichier et ensuite l'oubliera. En attendant, parce que Sally attend toujours pour éditer le fichier, ses mains sont liées. Et ensuite Harry va en vacances. Maintenant Sally doit appeler un administrateur pour relâcher le verrou d'Harry. La situation se finit en causant beaucoup de retard inutile et de temps gaspillé. ? Le verrouillage peut causer une sérialisation inutile. Et si Harry édite le début d'un fichier texte et Sally veut simplement éditer la fin du même fichier ? Ces changements ne se chevauchent pas du tout. Ils pourraient facilement éditer le fichier simultanément et aucun grand mal n'arriverait, à supposer que les changements aient été correctement fusionnés ensemble. Ils n'ont aucun besoin de prendre leur tour dans cette situation. ? Le verrouillage peut créer un faux sentiment de sécurité. Disons qu'Harry verrouille et édite le fichier A, tandis que Sally verrouille et édite le fichier B en même temps. Mais supposons qu'A et B dépendent l'un de l'autre et les changements faits à chacun sont sémantiquement incompatibles. Soudainement A et B ne marchent désormais plus ensemble. Le système de verrouillage était impuissant à empêcher le problème - encore il a fourni d'une façon ou d'une autre un sentiment de fausse sécurité. C'est facile pour Harry et Sally de s'imaginer qu'en verrouillant les fichiers, chacun commence une tâche sûre, isolée et les interdit ainsi de discuter de leurs changements incompatibles dès le début. 2.2.3. La solution Copier-Modifier-Fusionner Subversion, CVS et les autres systèmes de contrôle de version utilisent un modèle copier-modifier- fusionner comme une alternative au verrouillage. Dans ce modèle, le client de chaque utilisateur lit le référentiel et crée une copie de travail personnelle du fichier ou du projet. Les utilisateurs travaillent alors en parallèle, modifiant leurs copies privées. Finalement, les copies privées sont fusionnées ensemble dans une version nouvelle, finale. Le système de contrôle de version aide souvent avec la fusion, mais en fin de compte un être humain est responsable pour qu'elle se produise correctement. Voici un exemple. Disons qu'Harry et Sally ont chacun une copie de travail du même projet, extrait du référentiel. Ils travaillent en même temps et modifient localement le même fichier A. Sally sauvegarde Concepts de base du contrôle de version 8 ses changements dans le référentiel d'abord. Quand Harry essaie de sauvegarder ses changements, le référentiel l'informe que son fichier A est périmé. Autrement dit, dans le référentiel, ce fichier A a été modifié depuis qu'il a été extrait. Donc Harry demande à son client de fusionner les nouveaux changements du fichier A du référentiel avec sa copie de travail. Il y a des chances que les changements de Sally ne se chevauchent pas avec les siens ; ainsi une fois qu'il a les deux changements intégrés, il sauvegarde sa copie de travail sur le référentiel. Figure 2.4. La solution Copier-Modifier-Fusionner Figure 2.5. ...Suite du modèle Copier-Modifier-Fusionner Concepts de base du contrôle de version 9 Mais que se passe-t-il si les changements de Sally chevauchent les changements d'Harry ? Que se passe- t-il alors ? Cette situation est appelée un conflit et habituellement, ce n'est pas vraiment un problème. Quand Harry demande à son client de fusionner les derniers changements du référentiel vers sa copie de travail, sa copie du fichier A est marquée d'une façon ou d'une autre comme étant dans un état de conflit : il sera capable de voir les deux jeux de changements en conflit et choisira manuellement entre eux. Notez que le logiciel ne peut pas résoudre automatiquement les conflits ; seuls les êtres humains sont capables de comprendre et de faire les choix intelligents nécessaires. Une fois qu'Harry a manuellement résolu les changements se chevauchant (peut-être en discutant du conflit avec Sally !), il peut sans risque sauvegarder le fichier fusionné sur le référentiel. Le modèle copier-modifier-fusionner peut sembler un peu chaotique, mais en pratique, il fonctionne de manière extrêmement fluide. Les utilisateurs peuvent travailler en parallèle, n'ayant jamais à s'attendre. Quand ils travaillent sur les mêmes fichiers, il s'avère que la plupart de leurs changements simultanés ne se chevauchent pas du tout ; les conflits sont peu fréquents. Et le temps que cela prend pour résoudre des conflits est moindre que le temps perdu par un système de verrouillage. À la fin, tout cela se réduit à un facteur critique : la communication entre les utilisateurs. Quand les utilisateurs communiquent mal, les conflits tant syntaxiques que sémantiques augmentent. Aucun système ne peut forcer les utilisateurs à communiquer parfaitement et aucun système ne peut détecter les conflits sémantiques. Ainsi il n'y a aucune raison d'être apaisé par une fausse promesse qu'un système de verrouillage empêchera d'une façon ou d'une autre des conflits ; en pratique, le verrouillage semble inhiber la productivité plus qu'autre chose. Il y a une situation commune où le modèle verrouiller-modifier-déverrouiller s'en sort mieux et c'est quand vous avez des fichiers qui ne sont pas fusionnables. Par exemple, si votre référentiel contient quelques images graphiques et deux personnes modifient une image en même temps, il n'y a aucun moyen de fusionner ces changements. Soit Harry, soit Sally perdra ses changements. 2.2.4. Que fait Subversion ? Subversion utilise la solution copier-modifier-fusionner par défaut et dans des nombreux cas c'est tout ce dont vous aurez jamais besoin. Cependant, à partir de la version 1.2, Subversion supporte aussi le verrouillage de fichier, si vous avez des fichiers non-fusionnables, ou si vous êtes simplement forcés à une politique de verrouillage par le management, Subversion fournira encore les fonctionnalités dont vous avez besoin. 2.3. Subversion en action 2.3.1. Copies de travail Vous a déjà lu au sujet des copies de travail ; maintenant nous allons vous montrer comment le client Subversion les crée et les utilise. Une copie de travail de Subversion est une arborescence de répertoire ordinaire sur votre système local, contenant une collection de fichiers. Vous pouvez éditer ces fichiers comme vous le souhaitez, et si ce sont des fichiers de code source, vous pouvez compiler votre programme de la façon habituelle. Votre copie de travail est votre propre secteur de travail privé : Subversion n'incorporera jamais les changements d'autres personnes, ni ne rendra vos propres changements disponibles aux autres, jusqu'à ce que vous lui disiez explicitement de le faire. Après avoir fait des changements dans votre copie de travail et avoir vérifié qu'ils fonctionnent correctement, Subversion vous fournit des commandes pour publier vos changements et ainsi les rendre disponibles aux les autres personnes travaillant avec vous sur le projet. Si d'autres personnes publient leurs changements dans le référentiel, Subversion vous fournit des commandes pour fusionner ces changements dans votre répertoire de travail. Concepts de base du contrôle de version 10 Une copie de travail contient aussi quelques fichiers supplémentaires, créés et entretenus par Subversion, pour l'aider à effectuer ces commandes. Particulièrement chaque répertoire dans votre copie de travail contient un sous-répertoire nommé .svn, aussi connu comme le répertoire administratif de la copie de travail. Les fichiers de chaque répertoire administratif aident Subversion à reconnaître quels fichiers contiennent des changements non publiés et quels fichiers sont périmés par rapport au travail des autres. Un référentiel typique de Subversion contient souvent les fichiers (ou le code source) pour plusieurs projets ; d'habitude, chaque projet est un sous-répertoire dans l'arborescence du système de fichiers du référentiel. Dans cette optique, la copie de travail d'un utilisateur correspondra d'habitude à un sous-arbre particulier du référentiel. Par exemple, supposons que vous avez un référentiel contenant deux projets d'application. Figure 2.6. Le système de fichiers du référentiel En d'autres termes, la racine du référentiel a deux sous-répertoires : paint et calc. Pour obtenir une copie de travail, vous devez extraire une sous-arborescence du référentiel. (Le terme extraire peut faire penser à un quelconque verrouillage ou à une réservation des ressources, mais il n'en est rien ; il crée simplement une copie privée du projet pour vous). Supposons que vous faites des changements sur button.c. Puisque le répertoire .svn se rappelle la date de modification et le contenu original du fichier, Subversion peut dire que vous avez modifié le fichier. Cependant, Subversion ne rend pas vos changements publics jusqu'à ce que vous le lui disiez explicitement. L'acte de publier vos changements est plus communément appelé livrer (ou valider) les changements au référentiel. Pour publier vos changements aux autres, vous pouvez utiliser la commande de Subversion livrer. Concepts de base du contrôle de version 11 Maintenant vos changements sur button.c ont été livrés au référentiel ; si un autre utilisateur extrait une copie de travail de /calc, il verra vos changements dans la dernière version du fichier. Supposons que vous avez une collaboratrice, Sally, qui a extrait une copie de travail de /calc en même temps que vous. Quand vous livrez votre changement sur button.c, la copie de travail de Sally est laissée inchangée ; Subversion modifie seulement les copies de travail à la demande de l'utilisateur. Pour actualiser son projet, Sally peut demander à Subversion de mettre à jour sa copie de travail, en utilisant la commande de Subversion mettre à jour. Cela incorporera vos changements dans sa copie de travail, en même temps que d'autres qui ont été livrés depuis qu'elle l'a extrait. Notez que Sally n'a pas dû spécifier les fichiers à mettre à jour; Subversion utilise l'information dans le répertoire .svn et la nouvelle information dans le référentiel, pour décider quels fichiers doivent être actualisés. 2.3.2. URL de référentiel Les référentiels de Subversion peuvent être accédés par beaucoup de méthodes différentes - sur le disque local, ou par des protocoles de réseau divers. Un emplacement de référentiel, cependant, est toujours une URL. Le schéma d'URL indique la méthode d'accès : Schéma Méthode d'accès file:// Accès direct au référentiel sur disque local ou réseau. http:// Accès via le protocole WebDAV à un serveur Apache avec Subversion. https:// Même chose que http://, mais avec cryptage SSL. svn:// Accès TCP/IP non authentifié via un protocole personnalisé à un serveur svnserve. svn+ssh:// Accès TCP/IP authentifié, crypté via un protocole personnalisé à un serveur svnserve. Tableau 2.1. URL d'accès au référentiels Pour la plupart, les URL de Subversion utilisent la syntaxe standard, autorisant la définition des noms serveur et des numéros de port dans l'URL. La méthode d'accès file:// est normalement utilisée pour les accès locaux, bien qu'elle puisse être utilisée avec des chemins UNC pour un hôte non local. L'URL prend donc la forme file://nomhote/chemin/vers/referentiel. Pour la machine locale, la partie nomhote de l'URL doit être soit absente, soit localhost. Pour cette raison, les chemins locaux apparaissent normalement avec trois slashs, file:///chemin/vers/referentiel. Also, users of the file:// scheme on Windows platforms will need to use an unofficially « standard » syntax for accessing repositories that are on the same machine, but on a different drive than the client's current working drive. Either of the two following URL path syntaxes will work where X is the drive on which the repository resides:Ainsi, les utilisateurs du système de fichier file: sur les plate-formes Windows devront utiliser une syntaxe « standard » non-officielle pour avoir accès aux référentiels qui sont sur la même machine, mais sur un disque différent du disque de travail. Les deux syntaxes de chemin d'URL suivantes marcheront ; X est le disque sur lequel est hébergé le référentiel : file:///X:/chemin/vers/référentiel ... file:///X|/chemin/vers/référentiel ... Notez qu'une URL utilise des slashs ordinaires bien que la forme native d'un chemin (non-URL) utilise des antislashs sous Windows. Concepts de base du contrôle de version 12 Vous pouvez sans risque avoir accès à un référentiel FSFS via un partage réseau, mais vous ne pouvez pas avoir accès à un référentiel BDB de cette façon. Avertissement Ne créez pas ou n'accédez pas à un référentiel Berkeley DB sur un partage réseau. Il ne peut pas exister sur un système de fichiers distant. Même si vous faites mapper le disque réseau à une lettre de disque. Si vous essayez d'utiliser Berkeley DB sur un partage réseau, les résultats sont imprévisibles - vous pouvez voir des erreurs mystérieuses tout de suite, ou cela peut s'écouler des mois avant que vous ne découvriez que votre base de données du référentiel est subtilement corrompue. 2.3.3. Révisions Une opération svn commit peut publier les changements de n'importe quel nombre de fichiers et de répertoires comme une seule transaction atomique. Dans votre copie de travail, vous pouvez changer le contenu des fichiers, créer, supprimer, renommer et copier des fichiers et des répertoires et ensuite livrer le jeu complet de changements comme une unité. Dans le référentiel, chaque livraison est traitée comme une transaction atomique : tous les changements de la livraison ont lieu, ou aucun n'a lieu. Subversion essaye de conserver cette atomicité face aux plantages du programme, pannes système, problèmes de réseau et autres actions utilisateur. Chaque fois que le référentiel accepte une livraison, cela crée un nouvel état de l'arborescence du système de fichiers, appelé une révision. À chaque révision est assignée un entier naturel unique, plus grand que le numéro de la révision précédente d'une unité. La révision initiale d'un référentiel récemment créé est numérotée zéro et ne consiste en rien d'autre qu'un répertoire racine vide. Une façon agréable de visualiser le référentiel est une série d'arbres. Imaginez un tableau de numéros de révision, commençant à 0, s'étirant de gauche à droite. Chaque numéro de révision a un arbre du système de fichiers s'accrochant au-dessous de lui et chaque arbre est un « instantané » de la façon à laquelle le référentiel ressemble après chaque livraison. Figure 2.7. Le référentiel Concepts de base du contrôle de version 13 Numéros de révision globaux À la différence de beaucoup d'autres systèmes de contrôle de version, les numéros de révision de Subversion s'appliquent à toute l'arborescence, et non à des fichiers individuels. Chaque numéro de révision sélectionne un arbre entier, un état particulier du référentiel après un certain changement livré. Une autre façon d'y penser est que cette révision N représente l'état du système de fichiers du référentiel après que la Nième livraison. Quand un utilisateur de Subversion parle de ``la révision 5 de foo.c", il veut dire vraiment ``foo.c comme il apparaît à la révision 5." Remarquez qu'en général, les révisions N et M d'un fichier ne diffèrent pas nécessairement ! Il est important de noter que les copies de travail ne correspondent pas toujours à une seule révision dans le référentiel ; elles peuvent contenir des fichiers de plusieurs révisions différentes. Par exemple, supposez que vous extrayiez une copie de travail d'un référentiel dont la révision la plus récente est 4 : calc/Makefile:4 integer.c:4 button.c:4 À l'heure actuelle, ce répertoire de travail correspond exactement à la révision 4 dans le référentiel. Cependant, supposez que vous faites un changement sur button.c et que vous livrez ce changement. En admettant qu'aucune autre livraison n'ait eu lieue, votre livraison créera la révision 5 du référentiel, et votre copie de travail ressemblera maintenant à cela : calc/Makefile:4 integer.c:4 button.c:5 Supposons que, à ce point, Sally livre une modification sur integer.c, créant la révision 6. Si vous utilisez svn update pour actualiser votre copie de travail, elle ressemblera alors à ceci : calc/Makefile:6 integer.c:6 button.c:6 Les changements de Sally sur integer.c apparaîtront dans votre copie de travail et votre changement seront toujours présent dans button.c. Dans cet exemple, le texte Makefile est identique dans des révisions 4, 5 et 6, mais Subversion marquera votre copie de travail de Makefile avec la révision 6 pour indiquer qu'il est toujours d'actualité. Ainsi, après avoir fait une mise à jour propre au sommet de votre copie de travail, elle correspondra généralement exactement à une révision dans le référentiel. 2.3.4. Comment les copies de travail suivent le référentiel Pour chaque fichier dans un répertoire de travail, Subversion enregistre deux informations essentielles dans le secteur administratif .svn/ : ? sur quelle révision votre fichier de travail est basé (cela s'appelle la révision de travail du fichier), et ? un enregistrement d'horodatage quand la copie locale a été mise à jour en dernier par le référentiel. Avec ces informations, en parlant au référentiel, Subversion peut dire dans lequel des quatre états suivants se trouve un fichier de travail : Inchangé et courant Le fichier est inchangé dans le répertoire de travail et aucun changement sur ce fichier n'a été livré au référentiel depuis sa révision de travail. Une livraison du fichier ne fera rien et une mise à jour du fichier ne fera rien. Concepts de base du contrôle de version 14 Changé localement et courant Le fichier a été changé dans le répertoire de travail et aucun changement sur ce fichier n'a été livré au référentiel depuis sa révision de base. Il y a des changements locaux qui n'ont pas été livrés au référentiel, ainsi une livraison du fichier réussira à publier vos changements et une mise à jour du fichier ne fera rien. Inchangé et périmé Le fichier n'a pas été changé dans le répertoire de travail, mais il a été changé dans le référentiel. Le fichier devrait être mis à jour éventuellement, pour l'actualiser avec la révision publique. Une livraison du fichier ne fera rien et une mise à jour du fichier intègrera les derniers changements dans votre copie de travail. Changé localement et périmé Le fichier a été modifié dans le répertoire de travail, et dans le référentiel. Une livraison du fichier échouera avec une erreur périmé. Le fichier devrait d'abord être mis à jour ; la commande mise à jour essayera de fusionner les deux versions. Si Subversion réussit pas à faire correctement la fusion, il laisse l'utilisateur résoudre le conflit. 2.4. Résumé Nous avons couvert un certain nombre de concepts fondamentaux de Subversion dans ce chapitre : ? Nous avons présenté les notions du référentiel central, la copie de travail du client et le tableau d'arbres de révision de référentiel. ? Nous avons vu quelques exemples simples comment deux collaborateurs peuvent utiliser Subversion pour publier et recevoir des changements l'un de l'autre, en utilisant le modèle "copier-modifier- fusionner". ? Nous avons un peu parlé de la façon dont Subversion suit à la trace et gère l'information dans une copie de travail. 15 Chapitre 3. Le référentiel Peu importe le protocole que vous utilisez pour avoir accès à vos référentiels, vous devez toujours créer au moins un référentiel. Cela peut être fait soit avec le client de ligne de commande de Subversion soit avec TortoiseSVN. Si vous n'avez pas encore créé de référentiel Subversion, il est temps de le faire maintenant. 3.1. Création de référentiel Vous pouvez créer un référentiel avec le backend FSFS ou avec le format de base de données Berkeley (BDB) plus ancien. Le format de FSFS est plus rapide et plus facile à gérer, il fonctionne maintenant sur les partages réseau et sous Windows 98 sans problème. Le format BDB est considéré comme plus stable car il est utilisé depuis plus longtemps ; cependant, FSFS est maintenant utilisé depuis plusieurs années, donc cet argument est dépassé. Lisez Choosing a Data Store [http://svnbook.red-bean.com/ en/1.5/svn.reposadmin.planning.html#svn.reposadmin.basics.backends] dans le manuel de Subversion pour plus d'informations. 3.1.1. Créer un référentiel avec le client de ligne de commande 1. Créez un dossier vide avec le nom SVN (par exemple D:\SVN\), qui est utilisé comme racine pour tous vos référentiels. 2. Créez un autre dossier MonNouveauRéférentiel dans D:\SVN\. 3. Ouvrez l'invite de commande (ou la boîte DOS), allez vers D:\SVN\ et tapez svnadmin create --fs-type bdb MonNouveauRéférentiel ou svnadmin create --fs-type fsfs MonNouveauRéférentiel Maintenant vous avez un nouveau référentiel situé à D:\SVN\MonNouveauRéférentiel. 3.1.2. Créer le référentiel avec TortoiseSVN Figure 3.1. Le menu TortoiseSVN pour les dossiers non versionnés Le référentiel 16 1. Ouvrez l'explorateur Windows 2. Créez un nouveau dossier et nommez-le par exemple SVNRéférentiel 3. Faites un clic droit sur le dossier nouvellement créé et sélectionnez TortoiseSVN ? Créer un référentiel ici.... Un référentiel est alors créé à l'intérieur du nouveau dossier. N'éditez pas ces fichiers vous-même !!! Si vous avez des erreurs assurez vous que le dossier est vide et qu'il n'est pas protégé en écriture. Astuce TortoiseSVN ne permet plus de créer des référentiels BDB, cependant vous pouvez toujours le faire en ligne de commande. Les référentiels FSFS sont généralement plus aisés à maintenir et, pour des raisons de compatibilité entre les différentes versions de BDB, nous permet de maintenir plus aisément TortoiseSVN. Pour des problèmes de compatibilité, les accès aux référentiels BDB de type file:// ne seront plus supportés dans les versions futures de TortoiseSVN, cependant l'accès à ce type de référentiel via un serveur en utilisant les protocoles svn://, http:// ou https:// sera toujours supporté. Pour cette raison, pour les référentiels destinés à être utilisés via le protocole file:// doivent être créés en FSFS. Bien sûr, nous recommendons également de ne pas utiliser d'accès de type file://, hormis à des fins de test. Utiliser un serveur est plus sécurisé et plus fiable pour toute utilisation mutualisée. 3.1.3. Accès local au référentiel Pour accéder à votre référentiel local vous avez besoin du chemin vers ce dossier. Souvenez-vous juste que Subversion s'attend à des chemins de référentiels dans la forme file:///C:/SVNRéférentiel/. Notez l'utilisation de slashs. Pour avoir accès à un référentiel placé sur une partage réseau vous pouvez soit utiliser le mappage de disque, ou vous pouvez utiliser le chemin UNC. Pour les chemins UNC, la forme est file:// NomDuServeur/chemin/vers/référentiel/. Notez qu'il y a seulement 2 slashs au début ici. Avant SVN 1.2, les chemins UNC devaient être donnés dans la forme plus obscure file:/// \NomDuServeur/chemin/vers/référentiel Cette forme est toujours supportée, mais n'est pas recommandée. Avertissement Do not create or access a Berkeley DB repository on a network share. It cannot exist on a remote file system. Not even if you have the network drive mapped to a drive letter. If you attempt to use Berkeley DB on a network share, the results are unpredictable - you may see mysterious errors right away, or it may be months before you discover that your repository database is subtly corrupted. 3.1.4. Accéder à un référentiel situé dans un partage réseau Au moins en théorie, il est possible d'utiliser un référentiel FSFS sur un partage réseau en utilisant le protocole file://, ce n'est certainement pas recommendé. En fait, nous le déconseillons fortement, et ne supportons pas un tel usage. Le référentiel 17 Premièrement vous donnez le droit d'accès en écriture dans le référentiel à tous les utilisateurs, de manière à ce qu'aucun ne puisse supprimer ou rendre complètement inutilisable de quelque manière que ce soit le référentiel. Ensuite, tous les protocoles d'échange de fichiers ne supportent pas le verouillage dont Subversion a besoin, donc votre référentiel peut être corrompu. Ca ne devrait pas arriver tout de suite, mais un jour deux utilisateurs vont essayer d'accéder au référentiel en même temps. Troisièmement, les droits des fichiers doivent être fixés exactement de cette manière. Vous pouvez vous en tirer sur un partage Windows, mais SAMBA est particulièrement compliqué. Les accès de type file:// sont réservés à des fins de test et de debug ou pour une utilisation mono- utilisateur. Lorsque vous voulez partager votre référentiel vous devez vraiment mettre en place un vrai serveur, et ce n'est pas aussi compliqué qu'il n'y parait. Lisez Section 3.5, « Accéder au référentiel » pour guider votre choix. 3.1.5. Disposition du référentiel Avant que vous n'importiez vos données dans le référentiel vous devriez d'abord penser à la façon dont vous voulez organiser vos données. Si vous utilisez une des dispositions recommandées, ce sera beaucoup plus facile plus tard. Il y a quelques standards, des manières recommandées d'organiser un référentiel. La plupart des personnes créent un répertoire trunk contenant la « version principale » de développement, un répertoire branches qui contient les copies de travail paralèlles et un répertoire tags qui contient les versions stables. Si un référentiel ne contient qu'un seul projet, ces répertoires sont créés à la base du référentiel : /trunk /branches /tags Si un référentiel contient de multiples projets, les gens indexent souvent leur disposition par branche : /trunk/paint /trunk/calc /branches/paint /branches/calc /tags/paint /tags/calc ...ou par projet: /paint/trunk /paint/branches /paint/tags /calc/trunk /calc/branches /calc/tags L'indexation par projet a un sens si les projets ne sont pas étroitement liés et si chacun est extrait individuellement. Pour des projets liés où vous pouvez vouloir extraire tous les projets en une fois, ou où les projets sont tous liés ensemble dans un unique package de distribution, il est souvent mieux d'indexer par branche. De cette façon vous avez seulement un tronc à extraire et les relations entre les sous-projets sont plus facilement visibles. Si vous adoptez une approche de niveau supérieur /trunk /tags /branches, il va sans dire que vous devez copier le tronc en entier pour chaque branche et chaque étiquette et d'une certaine façon, cette structure offre le plus de flexibilité. Le référentiel 18 Pour les projets sans rapport vous pouvez préférer utiliser des référentiels séparés. Quand vous livrez des changements, c'est le numéro de révision du référentiel entier qui change, pas le numéro de révision du projet. Avoir 2 projets sans rapport qui partagent un référentiel peut signifier de grands écarts dans les numéros de révision. Les projets Subversion et TortoiseSVN apparaissent à la même adresse hôte, mais sont des référentiels complètement séparés permettant le développement indépendant et aucune confusion sur les numéros de génération. Bien sûr, vous êtes libre d'ignorer ces dispositions communes. Vous pouvez créer n'importe quel sorte de variation, ce qui marche le mieux pour vous ou votre équipe. Rappelez-vous que quoi que vous choisissez, ce n'est pas un engagement permanent. Vous pouvez réorganiser votre référentiel à tout moment. Parce que les branches et les étiquettes sont des répertoires ordinaires, TortoiseSVN peut les déplacer ou les renommer comme vous le souhaitez. Passer d'une disposition à une autre ne revient qu'à exécuter une série de mouvements côté serveur ; si vous n'aimez pas la façon dont les choses sont organisées dans le référentiel, jonglez juste avec les répertoires. Si vous n'avez pas encore créé la structure de base de votre référentiel, vous devriez le faire maintenant. Il y a deux manière de le faire. Si vous souhaitez simplement une structure /trunk /tags /branches, vous pouvez utiliser l'explorateur de référentiel pour créer les trois répertoires (dans trois livraisons différentes). Si vous souhaitez créer une arborescence plus complexe, il sera plus simple de le faire directement sur le disque puis de l'importer dans une seule livraison, comme suit: 1. créez un nouveau répertoire vide sur votre disque dur 2. créez votre structure de dossier de niveau supérieur désirée à l'intérieur de ce dossier - n'y mettez pas encore de fichiers ! 3. importez cette structure dans le référentiel via un clic droit sur le dossier et choisissez TortoiseSVN ? Importer... Cela importera votre dossier temporaire dans la racine du référentiel pour créer la disposition de base du référentiel. Notez que le nom du dossier que vous importez n'apparaît pas dans le référentiel, seulement son contenu. Par exemple, créez la structure de dossier suivante : C:\Temp\Nouveau\trunk C:\Temp\Nouveau\branches C:\Temp\Nouveau\tags Importez C:\Temp\Nouveau dans la racine du référentiel, qui ressemblera alors à cela : /trunk /branches /tags 3.2. Sauvegarde de référentiel Quel que soit le type de référentiel que vous utilisez, il est extrêmement important que vous maintenez des sauvegardes régulières et que vous vérifiez la sauvegarde. Si le serveur tombe, vous pouvez être capable d'avoir accès à une version récente de vos fichiers, mais sans le référentiel tout votre historique est perdu pour toujours. Le moyen le plus simple (mais non recommandé) est juste de copier le dossier du référentiel sur le médium de secours. Cependant, vous devez être absolument sûr qu'aucun processus n'ait accès aux données. Dans ce contexte, accès veut dire pas d'accès du tout. Un référentiel BDB est écrit même quand l'opération semble seulement exiger la lecture, comme l'obtention du statut. Si votre référentiel est accédé pendant la copie, (navigateur Internet laissé ouvert, WebSVN, etc) la sauvegarde sera sans valeur. Le référentiel 19 La méthode recommandée est d'exécuter svnadmin hotcopy chemin/vers/référentiel chemin/vers/sauvegarde --clean-logs pour créer une copie de votre référentiel d'une manière sûre. Sauvegardez alors la copie. L'option -- clean-logs n'est pas exigée, mais supprime les fichiers de journal superflus quand vous sauvegardez un référentiel BDB, qui peut économiser un certain espace. L'outil svnadmin est installé automatiquement quand vous installez le client de ligne de commande de Subversion. Si vous installez les outils de ligne de commande sur un PC Windows, la meilleure façon est de télécharger la version d'installeur Windows. Il est compressé plus efficacement que la version .zip, donc le téléchargement est plus petit et il s'occupe de configurer les chemins pour vous. Vous pouvez télécharger la dernière version du client de ligne de commande de Subversion à partir de http:// subversion.tigris.org/servlets/ProjectDocumentList?folderID=91. 3.3. Scripts de hook côté serveur A hook script is a program triggered by some repository event, such as the creation of a new revision or the modification of an unversioned property. Each hook is handed enough information to tell what that event is, what target(s) it's operating on, and the username of the person who triggered the event. Depending on the hook's output or return status, the hook program may continue the action, stop it, or suspend it in some way. Please refer to the chapter on Hook Scripts [http://svnbook.red-bean.com/en/1.5/ svn.reposadmin.create.html#svn.reposadmin.create.hooks] in the Subversion Book for full details about the hooks which are implemented. Ces scripts de hook sont exécutés par le serveur qui héberge le référentiel. TortoiseSVN permet également de configurer des scripts de hook à exécuter côté client en réponse à certains événements. Voir Section 4.30.8, « Scripts hook côté client » pour plus d'information. Des exemples de scripts hook peuvent être trouvés dans le répertoire hooks du référentiel. Ces exemples de scripts sont appropriées pour des serveurs Unix/Linux, mais doivent être modifiés si votre serveur est basé sur Windows. Le hook peut être un fichier batch ou un exécutable. L'exemple ci-dessous montre un fichier batch qui pourrait être utilisé pour mettre en oeuvre un hook de pre-revprop-change. rem Autorise seulement les changements sur les commentaires. if "%4" == "svn:log" exit 0 echo Property '%4' ne peut pas être modifié >&2 exit 1 Notez que tout ce qui est envoyé sur stdout est abandonné. Si vous voulez qu'un message apparaisse dans la boîte de dialogue du rejet de la livraison vous devez l'envoyer sur stderr. Dans un fichier batch, c'est réalisé en utilisant >&2 3.4. Liens d'extraction Si vous voulez donner l'accès à votre référentiel Subversion à d'autres utilisateurs, vous pouvez vouloir mettre un lien vers celui-ci sur votre site Web. Une façon de rendre ceci plus accessible est d'inclure un lien d'extraction pour les autres utilisateurs de TortoiseSVN. Quand vous installez TortoiseSVN, il enregistre un nouveau protocole tsvn:. Quand un utilisateur de TSVN clique sur un lien de ce type, la boîte de dialogue d'extraction s'ouvrira automatiquement avec l'URL du référentiel déjà remplie. Pour inclure un tel lien dans votre page html, vous devez ajouter du code de ce type : Le référentiel 20 <a href="tsvn:http://nom.de.domaine.du.project.org/svn/trunk"> </a> Bien sûr ce sera encore mieux si vous avez inclus une image appropriée. Vous pouvez utiliser le logo de Tortoise SVN [http://tortoisesvn.tigris.org/images/TortoiseCheckout.png] ou vous pouvez vous servir de votre propre image. <a href="tsvn:http://nom.de.domaine.du.projet.org/svn/trunk"> <img src=TortoiseCheckout.png></a> Vous pouvez aussi faire pointer le raccourci vers une révision spécifique, par exemple <a href="tsvn:http://nom.de.domaine.du.projet.org/svn/trunk?100"> </a> 3.5. Accéder au référentiel To use TortoiseSVN (or any other Subversion client), you need a place where your repositories are located. You can either store your repositories locally and access them using the file:// protocol or you can place them on a server and access them with the http:// or svn:// protocols. The two server protocols can also be encrypted. You use https:// or svn+ssh://, or you can use svn:// with SASL. Si votre serveur est chez un hégergeur publique comme Google Code [http://code.google.com/hosting/ ] ou qu'il a déjà été configuré entièrement par quelqu'un d'autre. Allez à la page Chapitre 4, Guide d'utilisation quotidienne. If you don't have a server and you work alone, or if you are just evaluating Subversion and TortoiseSVN in isolation, then local repositories are probably your best choice. Just create a repository on your own PC as described earlier in Chapitre 3, Le référentiel. You can skip the rest of this chapter and go directly to Chapitre 4, Guide d'utilisation quotidienne to find out how to start using it. If you were thinking about setting up a multi-user repository on a network share, think again. Read Section 3.1.4, « Accéder à un référentiel situé dans un partage réseau » to find out why we think this is a bad idea. Setting up a server is not as hard as it sounds, and will give you better reliability and probably speed too. The next sections are a step-by-step guide on how you can set up such a server on a Windows machine. Of course you can also set up a server on a Linux machine, but that is beyond the scope of this guide. More detailed information on the Subversion server options, and how to choose the best architecture for your situation, can be found in the Subversion book under Server Configuration [http://svnbook.red- bean.com/en/1.5/svn.serverconfig.html]. 3.6. Serveur basé sur Svnserve 3.6.1. Introduction Subversion est livré avec Svnserve - un serveur stand-alone léger qui utilise une variante du protocole TCP/IP pour se connecter. C'est la solution idéale pour de petites installations, ou si un bon gros Apache ne peut être utilisé. In most cases svnserve is easier to setup and runs faster than the Apache based server, although it doesn't have some of the advanced features. And now that SASL support is included it is easy to secure as well. 3.6.2. Installer svnserve 1. Récupérez la dernière version de Subversion à cet endroit http://subversion.tigris.org/servlets/ ProjectDocumentList?folderID=91. Vous pouvez également récupérer le programme d'installation Le référentiel 21 prépackagé chez CollabNet ici : http://www.collab.net/downloads/subversion. Ce programme d'install mettra en place svnserve comme service Windows, et inclura quelques outils utiles si vous comptez utiliser SASL pour sécuriser votre serveur. 2. Si vous déjà une version de Subversion d'installée, et que svnserve est lancé, vous devrez l'arrêter avant de continuer. 3. Exécutez le programme d'installation de Subversion. Si vous l'exécutez sur votre serveur (ce qui est recommendé) vous pouvez passer l'étape 4. 4. Ouvrez l'explorateur Windows, allez au répertoire d'installation de Subversion (habituellement C:\Program Files\Subversion) et dans le répertoire bin, trouvez les fichiers svnserve.exe, intl3_svn.dll, libapr.dll, libapriconv.dll, libapriutil.dll, libdb*.dll, libeay32.dll et ssleay32.dll - copiez ces fichiers, ou copiez simplement tout le contenu du répertoire bin, dans un répertoire sur votre serveur, par exemple c:\svnserve 3.6.3. Exécuter svnserve Maintenant que svnserve est installé, vous avez besoin qu'il tourne sur votre serveur. L'approche la plus simple est d'exécuter ce qui suit à partir d'un interpréteur de commandes DOS ou de créer un raccourci Windows : svnserve.exe --daemon svnserve démarrera maintenant en attendant des requêtes entrantes sur le port 3690. Le commutateur --daemon indique à svnserve de fonctionner comme un processus de démon, donc il existera toujours jusqu'à ce qu'il soit arrêté manuellement. Si vous n'avez pas encore créé de référentiel, suivez les instructions données avec le paramétrage du serveur Apache Section 3.7.4, « Configuration ». Pour tester que svnserve fonctionne, utilisez TortoiseSVN ? Explorateur de référentiel pour voir un référentiel. En supposant que votre référentiel est placé dans c:\repos\TestRepo et votre serveur est appelé localhost, entrer : svn://localhost/repos/TestRepo quand l'explorateur de référentiel le demande. Vous pouvez aussi augmenter la sécurité et gagner du temps en entrant l'URL avec svnserve en utilisant le commutateur --root pour indiquer l'emplacement racine et limiter l'accès à un répertoire spécifique sur le serveur : svnserve.exe --daemon --root disque:\chemin\vers\racine\référentiel En utilisant le test précédent comme guide, svnserve fonctionnerait maintenant comme : svnserve.exe --daemon --root c:\référentiels Et dans TortoiseSVN notre URL de l'explorateur de référentiel est maintenant raccourcie en : svn://localhost/TestRéférentiel Le référentiel 22 Notez que le commutateur --root est aussi nécessaire si votre référentiel est placé sur une partition ou un disque différent de l'emplacement de svnserve sur votre serveur. Svnserve s'occupera de plusieurs référentiels. Indiquez juste leur emplacement dans le répertoire racine, et accédez y en utilisant des chemins relatifs à la racine. Avertissement Ne créez pas ou n'accédez pas à un référentiel Berkeley DB sur un partage réseau. Il ne peut pas exister sur un système de fichiers distant. Même si vous faites mapper le disque réseau à une lettre de disque. Si vous essayez d'utiliser Berkeley DB sur un partage réseau, les résultats sont imprévisibles - vous pouvez voir des erreurs mystérieuses tout de suite, ou cela peut s'écouler des mois avant que vous ne découvriez que votre base de données du référentiel est subtilement corrompue. 3.6.3.1. Exécuter svnserve en tant que service Exécuter svnserve par un utilisateur n'est généralement pas la meilleure solution. Cela revient à avoir toujours un utilisateur connecté sur votre serveur et vous rappeler de le relancer après un redémarrage. Une meilleure manière consiste à lancer svnserve en tant que service Windows. À partir de Subversion 1.4, svnserve peut être installé comme un service windows natif. Pour installer svnserve comme service Windows, exécutez la commande suivante. Le service sera alors créé et lancé à chaque démarrage de Windows. sc create svnserve binpath= "c:\svnserve\svnserve.exe --service --root c:\referentiel" displayname= "Subversion" depend= tcpip start= auto Si un des chemin d'accès contient des espaces, vous devrez encapsuler ceux ci avec des double cotes, comme suit : sc create svnserve binpath= " \"C:\Program Files\Subversion\bin\svnserve.exe\" --service --root c:\referentiel" displayname= "Subversion" depend= tcpip start= auto Vous pouvez également ajouter une description après avoir créé le service. Elle sera visible depuis la fenêtre de gestion des services de Windows. sc description svnserve "Serveur Subversion (svnserve)" Notez la ligne de commande relativement atypique utilisée par sc. Dans la paire clé= valeur il ne doit pas y avoir d'espace entre la clé et le = mais il doit y en avoir un avant la valeur. Astuce Microsoft recommande maintenant que les services soient exécutés soit par le compte Service Local soit par le compte Service Réseau. Référez-vous The Services and Service Accounts Security Planning Guide [http://www.microsoft.com/technet/security/ topics/serversecurity/serviceaccount/default.mspx]. Pour créer le service sous le compte Service Local, ajoutez ce qui suit à l'exemple ci-dessus. Le référentiel 23 obj= "NT AUTHORITY\LocalService" Notez que vous devriez donner au compte Service Local les droits appropriés tant pour Subversion et vos référentiels que pour toute application utilisée par les scripts hook. Le groupe intégré pour cela est appelé "SERVICE LOCAL". A partir du moment où vous avez installé le service, vous devez aller dans la fenêtre de gestion des services pour le démarrer (juste cette fois ci, il se lancera ensuite automatiquement après le redémarrage du serveur). Pour plus d'informations, consultez le documentWindows Service Support for Svnserve [http:// svn.collab.net/repos/svn/trunk/notes/windows-service.txt]. Si vous aviez une ancienne version de svnserve utilisant le wrapper SVNService, et que vous voulez maintenant utiliser le support natif, vous devez désincrire le wrapper comme service (n'oubliez pas d'arrêter d'abord le service !). Utilisez simplement la commande svnservice -remove pour retirer l'entrée dans la base de registre. 3.6.4. Authentification de base avec svnserve L'installation par défaut de svnserve fournit un accès anonyme en lecture seule. Cela signifie que vous pouvez utiliser une URL du type svn:// pour extraire, mettre à jour, ou utiliser l'explorateur de référentiel dans TortoiseSVN pour voir le référentiel, mais vous ne pourrez faire aucune livraison. Pour permettre l'accès en écriture à un référentiel, vous devez éditer le fichier conf/svnserve.conf dans votre répertoire de référentiel. Ce fichier contrôle la configuration du démon svnserve et contient aussi la documentation utile. Vous pouvez activer l'accès en écriture anonyme en mettant simplement : [general] anon-access = write Cependant, vous ne saurez pas qui a fait des changements à un référentiel, puisque la propriété svn:author sera vide. Vous serez aussi incapables de contrôler qui fait des changements à un référentiel. C'est un paramétrage quelque peu risqué ! Une façon de surmonter cela est de créer une base de données de mot de passe : [general] anon-access = none auth-access = write password-db = fichier_utilisateur Où fichier_utilisateur est un fichier qui existe dans le même répertoire que svnserve.conf. Ce fichier peut vivre ailleurs dans votre système de fichiers (utile pour quand vous avez plusieurs référentiels qui exigent les mêmes droits d'accès) et peuvent être référencés en utilisant un chemin absolu, ou un chemin relatif au répertoire conf. Si vous incluez un chemin, il doit être écrit de /la/manière/ unix. L'utilisation de \ ou des lettres de disque ne marchera pas. Le fichier_utilisateur devrait avoir une structure de : [users] nom_utilisateur = mot_de_passe ... Le référentiel 24 Cet exemple interdira tout accès aux utilisateurs non authentifiés (anonymes) et donnera l'accès en lecture- écriture aux utilisateurs inscrits dans fichier_utilisateur. Astuce Si vous gérez plusieurs référentiels avec la même base de données de mots de passe, l'utilisation d'un groupe d'identification facilitera la tâche des utilisateurs, dans la mesure où TortoiseSVN peut garder vos accréditations dans la mémoire cache vous n'avez à les saisir qu'une seule fois. Plus d'informations sont disponibles dans le manuel de Subversion dans les sections Create a 'users' file and realm [http://svnbook.red-bean.com/ en/1.5/svn.serverconfig.svnserve.html#svn.serverconfig.svnserve.auth.users] and Client Credentials Caching [http://svnbook.red-bean.com/en/1.5/ svn.serverconfig.netmodel.html#svn.serverconfig.netmodel.credcache] 3.6.5. Sécuriser le serveur avec SASL 3.6.5.1. Qu'est-ce que SASL ? La couche d'authentification et de sécurisation Cyrus est open source et développée par l'université Carnegie Mellon. Elle étoffe les protocoles réseau de capacités d'authentification et de cryptage, et tout comme Subversion à partir de sa version 1.5, svnserve et TortoiseSVN savent utiliser de cette librairie. Pour plus de détails sur les options disponibles, consultez la section Using svnserve with SASL [http://svnbook.red-bean.com/en/1.5/svn.serverconfig.svnserve.html#svn.serverconfig.svnserve.sasl] du manuel de référence de Subversion. Si vous recherchez un moyen simple de mettre en place un système d'authentification et de cryptage sur un serveur Windows, de manière à pouvoir accéder à votre référentiel depuis le gros méchant Internet, continuez à lire. 3.6.5.2. Authentification SASL Pour activer le mécanisme spéficique à SASL sur le serverr, vous aurez besoin de faire trois choses. Premièrement, créer une section [sasl] dans le fichier svnserve.conf de votre référentiel, avec ce couple clé-valeur: use-sasl = true Ensuite, créez un fichier nommé svn.conf au bon endroit - typiquement dans le réportoire d'installation de Subversion. Troisièmement, créer deux clefs de registre pour indiquer à SASL où trouver les éléments. Créez une clé nommée [HKEY_LOCAL_MACHINE\SOFTWARE\Carnegie Mellon\Project Cyrus \SASL Library] et insérez y deux valeurs de type chaine de caractère: SearchPath ayant comme valeur le chemin contenant le greffon sasl*.dll (qui est normalement le répertoire d'installation de Subversion), et ConfFile ayant comme valeur le chemin contenant le fichier svn.conf. Si vous avez utilisé le programme d'installation de CollabNet, ces clés auront déjà été créées pour vous. Ajoutez les lignes suivantes au fichier svn.conf : pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: DIGEST-MD5 sasldb_path: C:\TortoiseSVN\sasldb La dernière ligne contient le chemin vers la base de données d'authentification, qui est un fichier nommé sasldb. Elle peut aller n'importe où, mais un choix adapté est le répertoire parent du référentiel. Assurez vous que le service svnserve à le droit de lire ce fichier. Le référentiel 25 Si svnserve est démarré, redémarrez le pour qu'il puisse prendre en compte les nouvelles valeurs de configuration. A présent que tout est mis en place, il ne vous reste plus qu'à créer des utilisateurs ainsi que leur mot de passe. Pour ce faire, utilisez l'utilitaire saslpasswd2. Si vous avez utilisé le programme d'installation de CollabNet, cet utilitaire sera dans le répertoire d'installation. Utilisez une commande du style : saslpasswd2 -c -f C:\TortoiseSVN\sasldb -u realm utilisateur L'option -f donne le chemin vers la base de données, realm doit avoir la même valeur que celle définie dans le fichier svnserve.conf de votre référentiel, et utilisateur est exactement ce à quoi vous vous attendez. La valeur realm ne doit pas contenir d'espace. Vous pouvez voir la liste des utilisateurs enregistrés dans la base de données en utilisant le programme sasldblistusers2. 3.6.5.3. Cryptage SASL Pour activer ou désactiver des niveaux de cryptage, vous pouvez renseigner les deux valeurs suivantes dans le fichier svnserve.conf de votre référentiel : [sasl] use-sasl = true min-encryption = 128 max-encryption = 256 Les options min-encryption et max-encryption controlent le niveau de cryptage requis par le serveur. Pour désactiver complètement ce cryptage, mettez ces deux valeurs à 0. Pour activer un checksum simple (i.e., protéger et garantir l'intégrité des données non cryptées), mettez les deux options à 1. Si vous voulez que le cryptage soit possible (mais pas nécessaire), mettez le minimum à 0, et le maximum à une valeur de quelques bits. Pour obliger sans condition le cryptage, les deux options à des valeurs supérieures à 1. Dans notre exemple précédent, on oblige les clients à faire un cryptage situé entre 128 bits et 256 bits. 3.6.6. Authentification avec svn+ssh Une autre façon d'authentifier les utilisateurs avec un serveur basé sur svnserve est d'utiliser un shell sécurisé (SSH) pour tunneler les requêtes. Cette méthode n'est pas aussi facile à configurer que SASL, mais peut être utile dans certains cas. Avec cette approche, svnserve n'est pas exécuté comme un processus démon, le shell sécurisé démarre svnserve pour vous plutôt, l'exécutant comme l'utilisateur SSH authentifié. Pour activer cela, vous avez besoin d'un démon shell sécurisé sur votre serveur. Une méthode simple pour mettre en place votre serveur est donnée là : Annexe G, Sécuriser Svnserve grâce à SSH. Vous pouvez trouver d'autres informations concernant SSH dans les FAQ en tapant « SSH » comme champ de recherche. Plus d'informations sur svnserve dans Version Control with Subversion [http://svnbook.red-bean.com]. 3.6.7. Autorisation basée sur le chemin avec svnserve En démarrant avec Subversion 1.3, svnserve supporte le même arrangement d'autorisation à base de chemin mod_authz_svn qui est disponible avec le serveur Apache. Vous devez éditer le fichier conf/ svnserve.conf dans votre répertoire de référentiel et ajouter une ligne se référant à votre fichier d'autorisation. [general] Le référentiel 26 authz-db = authz Ici, authz est un fichier que vous créez pour définir les autorisations d'accès. Vous pouvez utiliser un fichier séparé pour chaque référentiel, ou vous pouvez utiliser le même fichier pour plusieurs référentiels. Lisez Section 3.7.6, « Autorisation basée sur le chemin » pour une description du format du fichier. 3.7. Serveur basé sur Apache 3.7.1. Introduction La plus flexible de toutes les installations serveur possibles pour Subversion est basée sur Apache. Bien qu'un peu plus compliquée à mettre en place, elle offre des avantages que d'autres serveurs n'ont pas : WebDAV You could e.g. mount such a repository as a « Web folder » in the Windows explorer and then access it like any other folder in the file system.Le serveur Subversion basé sur Apache utilise le protocole WebDAV qui est aussi supporté par beaucoup d'autres programmes. Vous pourriez par exemple monter un tel référentiel comme un « Répertoire Web » dans l'explorateur Windows et y accéder ensuite comme n'importe quel autre dossier. Parcourir le référentiel Vous pouvez diriger votre navigateur à l'URL de votre référentiel et naviguer dans son contenu sans avoir de client Subversion installé. Cela donne accès à vos données à un cercle beaucoup plus large d'utilisateurs. Authentification Vous pouvez utiliser n'importe quel mécanisme d'identification que supporte Apache, y compris SSPI et LDAP. Sécurité Puisqu'Apache est très stable et sécurisé, vous obtenez automatiquement la même sécurité pour votre référentiel. Cela inclut le cryptage SSL. 3.7.2. Installer Apache La première chose dont vous avez besoin avant d'installer Apache est d'un ordinateur avec Windows2000, WinXP+SP1, Windows 2003, Vista ou Windows Server 2008. Avertissement Veuiller noter que Windows XP sans le service pack 1 entrainera des données erronées en réseau et pourrait donc corrompre votre référentiel ! 1. Téléchargez la dernière version du serveur web Apache à partir de http://httpd.apache.org/ download.cgi. Assurez-vous que vous téléchargez la version 2.2.x - la version 1.3.xx ne marchera pas ! Le programme d'installation d'Apache est disponible en cliquant sur le lien autres fichiers, allez ensuite dans le répertoire binaries/win32. Vous pouvez utiliser le fichier msi apache-2.2.x-win32-x86-openssl-0.9.x.msi (celui incluant le support OpenSSL). 2. Une fois que vous avez l'installeur Apache2, vous pouvez double-cliquer dessus et il vous guidera dans le processus d'installation. Assurez-vous que vous entrez l'URL du serveur correctement (si vous n'avez pas de nom de DNS pour votre serveur entrez seulement l'adresse IP). Je recommande d'installer Apache pour Tous les Utilisateurs, sur le Port 80, en tant que Service . Note : si vous avez déjà IIS ou un autre programme lancé qui écoute sur le port 80 l'installation pourrait échouer. Si cela arrive, allez au répertoire de programmes, \Apache Group\Apache2\conf et repérer le fichier httpd.conf. Le référentiel 27 Éditez ce fichier pour que Listen 80 soit changé pour un port libre, par exemple Listen 81. Redémarrez alors l'installation - elle devrait cette fois se terminer sans problème. 3. Maintenant testez si le serveur web Apache fonctionne correctement en allant avec votre navigateur internet à http://localhost/ - un site web préconfiguré devrait s'afficher. Attention Si vous décidez d'installer Apache en tant que service, soyez averti que par défaut il fonctionnera en tant que compte du système local. Une pratique plus sécurisée pour vous serait de créer un compte séparé pour exécuter Apache. Assurez-vous que le compte sur le serveur sur lequel Apache fonctionne possède une entrée explicite dans la liste de contrôle d'accès du répertoire du référentiel (clic-droit sur le répertoire | propriétés | sécurité), avec contrôle total. Autrement, les utilisateurs ne seront pas capables de livrer leurs changements. Même si Apache fonctionne en tant que système local, vous avez toujours besoin d'une telle entrée (qui sera le compte SYSTEM dans ce cas). Si cette permission n'est pas activé dans la configuration de vote serveur Apache, vos utilisateurs auront des messages d'erreur « Accès refusé », qui s'afficheront dans le journal des erreurs Apache comme erreur 500. 3.7.3. Installer Subversion 1. Téléchargez la dernière version des fichiers binaires Win32 de Subversion pour Apache. Soyez sûr de prendre la version correspondant à la version d'Apache que vous avez installé, dans le cas contraire vous aurez un message imcompréhensible quand vous redémarrerez. Si votre version d'Apache est la 2.2.x allez à cette adresse : http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100. 2. Exécutez l'installeur de Subversion et suivez les instructions. Si l'installeur de Subversion a reconnu que vous avez installé Apache, donc vous êtes presque au bout. S'il n'a pas pu trouver un serveur Apache alors vous devez faire quelques étapes complémentaires. 3. En utilisant l'explorateur Windows, allez au répertoire d'installation de Subversion (d'habitude c:\program files\Subversion) et trouvez les fichiers /httpd/mod_dav_svn.so et mod_authz_svn.so. Copiez ces fichiers au répertoire de modules Apache (d'habitude c: \program files\apache group\apache2\modules ). 4. Copiez les fichiers /bin/libdb*.dll et /bin/intl3_svn.dll du répertoire d'installation de Subversion au répertoire bin d'Apache. 5. Éditez le fichier de configuration d'Apache (d'habitude C:\Program Files\Apache Group \Apache2\conf\httpd.conf) avec un éditeur de texte comme le Bloc-notes et faites les changements suivants : Décommentez (supprimez la marque '#') les lignes suivantes : #LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule dav_module modules/mod_dav.so Ajoutez les deux lignes suivantes à la fin de la section LoadModule. LoadModule dav_svn_module modules/mod_dav_svn.so Le référentiel 28 LoadModule authz_svn_module modules/mod_authz_svn.so 3.7.4. Configuration Vous avez maintenant mis en place Apache et Subversion, mais Apache ne sait pas encore comment gérer les clients Subversion comme TortoiseSVN. Pour qu'Apache sache quelle URL sera utilisée pour les référentiels Subversion vous devez éditer le fichier de configuration d'Apache (d'habitude placé dans c:\program files\apache group\apache2\conf\httpd.conf) avec votre éditeur de texte préféré (par exemple le Bloc-notes) : 1. À la fin du fichier de configuration, ajoutez les lignes suivantes : <Location /svn> DAV svn SVNListParentPath on SVNParentPath D:\SVN #SVNIndexXSLT "/svnindex.xsl" AuthType Basic AuthName "Subversion repositories" AuthUserFile passwd #AuthzSVNAccessFile svnaccessfile Require valid-user </Location> Elle correspondent à une configuration d'Apache pour prendre en compte des référentiels Subversion situés physiquement dans le répertoire D:\SVN. Les référentiels sont disponibles pour le monde extérieur à partir de l'URL : http://MonServeur/svn/ . L'accès est limité aux utilisateurs/ mots de passe listés dans le fichier passwd. 2. Pour créer le fichier passwd, ouvrez l'invite de commande (la boîte DOS) une nouvelle fois, allez dans le dossier apache2 (habituellement c:\program files\apache group\apache2) et créez le fichier en tapant bin\htpasswd -c passwd <nom de l'utilisateur> Cela créera un fichier avec le nom passwd qui est utilisé pour l'authentification. Des utilisateurs supplémentaires peuvent être ajoutés avec bin\htpasswd passwd <nom de l'utilisateur> 3. Redémarrer le service Apache une nouvelle fois. 4. Allez avec votre navigateur sur http://MonServeur/svn/MonNouveauRéférentiel (où MonNouveauRéférentiel est le nom du référentiel Subversion que vous avez créé auparavant). Si tout s'est bien passé, un nom d'utilisateur et un mot de passe vous seront demandés, puis vous pouvez voir le contenu de votre référentiel. Une courte explication sur ce que vous venez juste de saisir : Réglage Explication <Location /svn> veut dire que les référentiels Subversion sont disponibles à partir de l'URL http://MonServeur/svn/ DAV svn indique à Apache quel module sera responsable pour servir cette URL - dans ce cas le module de Subversion. Le référentiel 29 Réglage Explication SVNListParentPath on Pour la version 1.3 de Subversion et supérieure, cette directive permet de lister tous les référentiels disponibles sous SVNParentPath. SVNParentPath D:\SVN indique à Subversion de chercher des référentiel sous D:\SVN SVNIndexXSLT "/ svnindex.xsl" Utilisé pour parcourir Internet avec un plus joli navigateur. AuthType Basic active l'authentification de base, c'est-à-dire Nom de l'utilisateur/ mot de passe AuthName "Subversion repositories" est utilisé comme information chaque fois qu'un dialogue d'identification apparaît pour dire à l'utilisateur pour quoi l'authentification est demandée. AuthUserFile passwd spécifie quel fichier de mots de passe est utilisé pour l'authentification AuthzSVNAccessFile Emplacement du fichier d'accès pour les chemins à l'intérieur d'un référentiel Subversion Require valid-user spécifie que seuls ls utilisateurs qui ont entré un nom d'utilisateur/ mot de passe correct peuvent accéder à l'URL Tableau 3.1. Réglages du httpd.conf d'Apache Mais ce n'est qu'un exemple. Il y a beaucoup, beaucoup plus de possibilités que vous pouvez faire avec le serveur web Apache. ? Si vous voulez que votre référentiel ait l'accès en lecture pour tout le monde mais l'accès en écriture seulement pour des utilisateurs spécifiques vous pouvez changer la ligne Require valid-user en <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> ? Utiliser un fichier passwd limite et autorise l'accès à tous vos référentiels comme une unité. Si vous voulez plus de contrôle sur les utilisateurs par dossier à l'intérieur d'un référentiel vous pouvez décommenter la ligne #AuthzSVNAccessFile svnaccessfile et créer un fichier d'accès de Subversion. Apache s'assurera que seuls les utilisateurs valides sont capables d'avoir accès votre emplacement /svn et passera alors le nom d'utilisateur au module AuthzSVNAccessFile de Subversion pour qu'il puisse mettre en application un accès plus granulaire basé sur les règles inscrites dans le fichier d'accès de Subversion. Notez que les chemins sont spécifiés comme référentiel:chemin ou simplement chemin. Si vous ne spécifiez pas de référentiel particulier, cette règle d'accès s'appliquera à tous les référentiels sous SVNParentPath. Le format du fichier de stratégie d'autorisation utilisé par mod_authz_svn est décrit dans Section 3.7.6, « Autorisation basée sur le chemin » ? Pour parcourir le référentiel avec un navigateur Internet plus agréable, décommentez la ligne Le référentiel 30 #SVNIndexXSLT "/svnindex.xsl" et mettez les fichiers svnindex.xsl, svnindex.css et menucheckout.ico dans le dossier racine (la plupart du temps C:/Program Files/Apache Group/Apache2/htdocs). Le nom de ce répertoire est fixé par la directive DocumentRoot dans votre fichier de configuration Apache. You can get those three files directly from our source repository at http://tortoisesvn.tigris.org/svn/ tortoisesvn/trunk/contrib/other/svnindex. (Section 3, « TortoiseSVN est gratuit ! » explains how to access the TortoiseSVN source repository). Le fichier XSL du référentiel TortoiseSVN a une fonctionnalité pratique : Si vous parcourez le référentiel grâce à un navigateur Internet, chaque répertoire aura une icone sur sa droite. Si vous cliquez sur cette icone, la fenêtre de livraison de TortoiseSVN sera ouverte depuis cette URL. 3.7.5. Plusieurs référentiels Si vous avez utilisé la directive SVNParentPath alors vous n'avez pas à changer le fichier de configuration d'Apache chaque fois que vous ajoutez un nouveau référentiel Subversion. Créez simplement le nouveau référentiel au même emplacement que le premier référentiel et vous avez fini ! Dans ma société, j'ai un accès direct à ce dossier spécifique sur le serveur via SMB (accès Windows normal aux fichiers). Donc je crée juste un nouveau dossier là, j'exécute la commande de TortoiseSVN TortoiseSVN ? Créer un référentiel ici... et un nouveau projet a un foyer... Si vous utilisez Subversion 1.3 ou supérieur, vous pouvez utiliser la directive SVNListParentPath on pour permettre à Apache de produire une liste de tous les projets disponibles si vous allez avec votre navigateur sur le chemin parent plutôt qu'à un référentiel spécifique. 3.7.6. Autorisation basée sur le chemin Le module mod_authz_svn permet un contrôle précis des autorisations d'accès basé sur les noms des utilisateurs et les chemins de référentiel. C'est possible avec le serveur Apache et, à partir de Subversion 1.3, c'est aussi disponible avec svnserve. Un fichier d'exemple ressemblerait à ceci : [groups] admin = john, kate devteam1 = john, rachel, sally devteam2 = kate, peter, mark docs = bob, jane, mike training = zak # Accès par défaut à TOUS les référentiels # Tout le monde peut lire, les admins peuvent écrire, Dan German est exclus. [/] * = r @admin = rw dangerman = # Permet aux développeurs un accès total aux référentiels de leurs projets [proj1:/] @devteam1 = rw [proj2:/] @devteam2 = rw [bigproj:/] @devteam1 = rw @devteam2 = rw trevor = rw # Donne aux personnes en charge de la documentation un accès en écrite sur tous le Le référentiel 31 [/trunk/doc] @docs = rw # Donne aux débutants un accès en écriture uniquement au référentiel d'entraînemen [TrainingRepos:/] @training = rw Notez que la vérification de chaque chemin peut être une opération couteuse, particulièrement dans le cas du journal de révision. Le serveur vérifie chaque chemin changé dans chaque révision et le vérifie pour la lisibilité, qui peut être consommatrice de temps sur les révisions qui affectent de grands nombres de fichiers. L'authentification et l'autorisation sont des processus séparés. Si un utilisateur veut obtenir l'accès à un chemin de référentiel, il doit satisfaire tant les pré-requis habituels d'authentification que les pré-requis d'autorisation du fichier d'accès. 3.7.7. Authentification avec un domaine Windows Comme vous l'avez peut-être remarqué vous devez faire une entrée nom d'utilisateur/mot de passe dans le fichier passwd pour chaque utilisateur séparément. Et si (pour des raisons de sécurité) vous voulez que vos utilisateurs changent périodiquement leurs mots de passe vous devez faire le changement manuellement. Mais il y a une solution pour ce problème - du moins si vous avez accès au référentiel de l'intérieur d'un réseau local avec un contrôleur de domaine Windows : mod_auth_sspi ! Le module SSPI original a été offert par Syneapps en incluant le code source. Mais son développement a été arrêté. Mais ne désespérez pas, la communauté l'a récupéré et l'a amélioré. Il a un nouveau foyer sur SourceForge [http://sourceforge.net/projects/mod-auth-sspi/]. ? Téléchargez le module qui correspond à votre version d'Apache, copiez alors le fichier mod_auth_sspi.so dans le dossier contenant les modules Apache. ? Éditez le fichier de configuration d'Apache : ajoutez la ligne LoadModule sspi_auth_module modules/mod_auth_sspi.so à la section LoadModule. Assurez-vous d'insérer cette ligne avant la ligne LoadModule auth_module modules/mod_auth.so ? Pour faire que les emplacements de Subversion utilisent ce type d'authentification, vous devez changer la ligne AuthType Basic en AuthType SSPI vous devez ajouter aussi SSPIAuth On SSPIAuthoritative On SSPIDomain <domaincontroller> SSPIOmitDomain on Le référentiel 32 SSPIUsernameCase lower SSPIPerRequestAuth on SSPIOfferBasic On dans le bloc <Location /svn>. Si vous n'avez pas de contrôleur de domaine, laissez le nom du contrôle de domaine comme <domaincontroller>. Notez que si vous vous authentifiez en utilisant SSPI, alors vous n'avez plus besoin de la ligne AuthUserFile pour définir un fichier de mot de passe. Apache authentifie votre nom d'utilisateur et votre mot de passe avec votre domaine Windows à la place. Vous devrez mettre à jour la liste d'utilisateurs dans votre svnaccessfile pour faire aussi référence au DOMAINE\nom d'utilisateur. Important L'authentification SSPI n'est disponible que pour les connexions sécurisées de type SSL (https). Si vous vous connectez à votre serveur en utilisant une connexion http simple, cela ne fonctionnera pas. Pour activer SSL sur votre serveur, voir le chapitre : Section 3.7.9, « Sécuriser le serveur avec SSL » Astuce Les fichiers AuthzSVNAccessFile de Subversion sont sensibles à la casse en ce qui concerne les noms d'utilisateur ("JUtilisateur" diffère "jutilisateur"). Dans le monde de Microsoft, les domaines Windows et les mots de passe ne sont pas sensibles à la casse. Cependant, certains administrateurs réseau aiment créer des comptes utilisateur en CamelCase (par exemple "JUtilisateur"). Cette différence peut vous mordre quand vous utilisez l'authentification SSPI lorsque le domaine Windows et les noms d'utilisateur sont passés à Subversion comme lorsque l'utilisateur les tape à l'invite. Internet Explorer passe souvent le nom de l'utilisateur à Apache en utilisant automatiquement la casse avec laquelle le compte a été créé. Le résultat final est que vous pouvez avoir besoin d'au moins deux entrées dans votre AuthzSVNAccessFile pour chaque utilisateur - une entrée minuscule et une entrée dans la même casse que celle qu'Internet Explorer passe à Apache. Vous devrez aussi apprendre à vos utilisateurs à aussi taper leurs accréditations en utilisant les minuscules quand ils accèdent aux référentiels via TortoiseSVN. Les journaux d'Erreurs et d'Accès d'Apache sont vos meilleurs amis dans le déchiffrement de problèmes comme ceux-ci puisqu'ils vous aideront à déterminer la chaîne du nom d'utilisateur passée par le module AuthzSVNAccessFile de Subversion. Vous pouvez avoir besoin d'expérimenter avec le format exact de la chaîne de l'utilisateur dans le svnaccessfile (par exemple DOMAINE\utilisateur contre DOMAINE// utilisateur) pour que tout fonctionne. 3.7.8. Plusieurs sources d'authentification Il est aussi possible d'avoir plus d'une source d'authentification pour votre référentiel Subversion. Pour ce faire, vous devez rendre chaque type d'authentification non définitive, pour qu'Apache vérifie plusieurs sources pour la correspondance nom utilisateur/mot de passe. Un scénario fréquent consiste à utiliser l'authentification par le domaine Windows et par fichier passwd, pour que vous puissiez fournir un accès SVN aux utilisateurs qui ne possèdent pas de login dans le domaine Windows. Le référentiel 33 ? Pour activer l'authentification via le domaine Windows et par un ficher d'authentification passwd, ajoutez les lignes suivantes dans le bloc <Location> de votre fichier de configuration Apache : AuthBasicAuthoritative Off SSPIAuthoritative Off Voici un exemple de configuration complète d'Apache pour une authentification combinant le domaine Windows et le fichier d'authentification passwd : <Location /svn> DAV svn SVNListParentPath on SVNParentPath D:\SVN AuthName "Subversion repositories" AuthzSVNAccessFile svnaccessfile.txt # NT Domain Logins. AuthType SSPI SSPIAuth On SSPIAuthoritative Off SSPIDomain <domaincontroller> SSPIOfferBasic On # Htpasswd Logins. AuthType Basic AuthBasicAuthoritative Off AuthUserFile passwd Require valid-user </Location> 3.7.9. Sécuriser le serveur avec SSL Même si Apache 2.2.x permet le support OpenSSL, ce n'est pas activé par défatu. Vous devez l'activer manuellement. 1. Dans le fichier de configuraton apache, décommentez les lignes: #LoadModule ssl_module modules/mod_ssl.so et en bas #Include conf/extra/httpd-ssl.conf changez alors la ligne (sur une seule ligne) SSLMutex "file:C:/Program Files/Apache Software Foundation/\ Apache2.2/logs/ssl_mutex" en SSLMutex default Le référentiel 34 2. Ensuite vous devez créer un certificat SSL. Pour faire cela ouvrez une invite de commande (la boîte DOS) et allez au dossier d'Apache (par exemple C:\program files\apache group \apache2) et tapez la commande suivante : bin\openssl req -config conf\openssl.cnf -new -out mon-serveur.csr On vous demandera une phrase de mot de passe. N'utilisez pas s'il vous plaît de mots simples, mais des phrases entières, par exemple une partie d'une poésie. Plus la phrase est longue, mieux c'est. Vous devez aussi entrer l'URL de votre serveur. Toutes les autres questions sont facultatives mais nous vous recommandons de remplir celles-ci aussi. Normalement le fichier privkey.pem est créé automatiquement, mais si ce n'est pas le cas vous devez exécuter cette commande pour le générer: bin\openssl genrsa -out conf\privkey.pem 2048 Ensuite, tapez les commandes bin\openssl rsa -in conf\privkey.pem -out conf\server.key et (sur une seule ligne) bin\openssl req -new -key conf\server.key -out conf\server.csr \ -config conf\openssl.cnf puis (sur une seule ligne) bin\openssl x509 -in conf\server.csr -out conf\server.crt -req -signkey conf\server.key -days 4000 Elles créeront un certificat qui expirera dans 4000 jours. Et enfin écrivez (sur une seule ligne) : bin\openssl x509 -in conf\server.cert -out conf\server.der.crt -outform DER Ces commandes ont créé quelques fichiers dans le répertoire conf de Apache (server.der.crt, server.csr, server.key, .rnd, privkey.pem, server.cert). 3. Redémarrez le service Apache. 4. Allez avec votre navigateur à https://servername/svn/project ... SSL et Internet Explorer Si vous sécurisez votre serveur avec SSL et utilisez l'authentification avec un domaine Windows vous vous apercevrez que la navigation dans le référentiel avec Internet Explorer ne marche plus. Ne vous inquiétez pas - c'est seulement qu'Internet Explorer n'est pas capable d'authentifier. Les autres navigateurs n'ont pas ce problème et TortoiseSVN et les autres clients Subversion sont toujours capable d'authentifier. Si vous voulez toujours utiliser IE pour parcourir le référentiel vous pouvez soit : ? définissez une directive <Location /path> dans le fichier de configuration d'Apache et ajoutez SSPIBasicPreferred On. Cela permettra à IE d'authentifier à nouveau, Le référentiel 35 mais les autres navigateurs et Subversion ne seront pas capables d'authentifier pour cet emplacement. ? Offrir de naviguer avec une authentification non cryptée (sans SSL) aussi. Étrangement IE n'a pas de problèmes avec l'authentification si la connexion n'est pas sécurisée avec SSL. ? Dans l'installation "standard" de ssl, il y a souvent la déclaration suivante dans l'hôte SSL virtuel d'Apache : SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 Il y a (avait ?) de bonnes raisons pour cette configuration, regardez http:// www.modssl.org/docs/2.8/ssl_faq.html#ToC49 Mais si vous voulez l'authentification NTML vous devez utiliser keepalive. Si vous décommentez entièrement SetEnvIf vous devriez être capables d'authentifier IE avec l'authentification windows avec SSL et Apache sur Win32 avec mod_auth_sspi inclus. Forcer l'accès SSL Une fois que vous avez mis en place SSL pour rendre votre référentiel plus sécurisé, vous pourriez vouloir désactiver l'accès normal non-SSL (http) et permettre seulement l'accès https. Pour ce faire, vous devez ajouter une autre directive au bloc <Location> de Subversion : SSLRequireSSL. Voici un exemple de bloc <Location> : <Location /svn> DAV svn SVNParentPath D:\SVN SSLRequireSSL AuthType Basic AuthName "Subversion repositories" AuthUserFile passwd #AuthzSVNAccessFile svnaccessfile Require valid-user </Location> 3.7.10. Utiliser des certificats avec des hôtes SSL virtuels Envoyé à la liste de diffusion TortoiseSVN par Nigel Green. Merci ! Avec certaines configurations de serveur, vous pouvez avoir à mettre en place un seul serveur avec 2 hôtes SSL virtuels: Le premier pour les accès internet publics, ne nécessitant aucun certificat côté client. Et un second, sécurisé avec certificat côté client, où tourne le serveur Subversion. Dans le fichier de configuration de Apache, ajouter une directive SSLVerifyClient Optional à la section per-server (i.e. en dehors de balises VirtualHost et Directory) force Apache à demander un certificat au client au moment d'établir la connexion SSL. A cause d'un bug dans le module mod_ssl il est crucial de demander le certificat à ce moment car sinon il ne fonctionnera plus en cas de tentative de re-connexion SSL. La solution est d'ajouter la directive suivante dans le répertoire du virtual host que vous voulez réserver à Subversion: Le référentiel 36 SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS" Cette directive autorise l'accès au répertoire seulement si le certificat du client a été reçu et validé. Pour résumer; les lignes utiles du fichier de configuration Apache sont: SSLVerifyClient Optional ### Configuration du virtual host public ### (ne nécessitant pas de certificat) <VirtualHost 127.0.0.1:443> <Directory "chemin du repertoire racine public"> </Directory> </VirtualHost> ### Configuration du virtual host pour SUBVERSION ### (nécessitant une certificat) <VirtualHost 127.0.0.1:443> <Directory "chemin du repertoire racine de subversion"> SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS" </Directory> <Location /svn> DAV svn SVNParentPath /chemin du referentiel </Location> </VirtualHost> 37 Chapitre 4. Guide d'utilisation quotidienne Ce document décrit l'utilisation quotidienne du client TortoiseSVN. Ce n'est pas une introduction aux systèmes de contrôle de version, ni une introduction à Subversion (SVN). C'est plutôt un endroit où vous pouvez regarder quand vous savez approximativement ce que vous voulez faire, mais vous ne vous rappelez pas tout à fait comment le faire. If you need an introduction to version control with Subversion, then we recommend you read the fantastic book: Version Control with Subversion [http://svnbook.red-bean.com/].Si vous avez besoin d'une introduction au contrôle de version avec Subversion, alors nous vous recommandons la lecture du livre fantastique : Version Control with Subversion [http://svnbook.red-bean.com/]. Ce document est aussi un travail en cours, de même que TortoiseSVN et Subversion. Si vous trouvez des erreurs, veuillez les annoncer sur la mailing list pour que nous puissions mettre à jour la documentation. Certaines copies d'écran dans le Guide d'Utilisation Quotidienne (GUQ) pourraient ne pas refléter l'état actuel du logiciel. Veuillez nous pardonner. Nous travaillons sur TortoiseSVN pendant notre temps libre. Pour se servir au mieux du guide d'utilisation quotidienne : ? Vous devez avoir déjà installé TortoiseSVN. ? Vous devriez être familier avec les systèmes de contrôle de version. ? Vous devez connaître les bases de Subversion. ? Vous devriez avoir mis en place un serveur et/ou avoir accès à un référentiel Subversion. 4.1. Pour commencer 4.1.1. Recouvrement d'icônes Figure 4.1. L'Explorateur montrant le recouvrement d'icônes Une des fonctionnalités les plus visibles de TortoiseSVN sont les recouvrements d'icônes qui apparaissent sur les fichiers de votre copie de travail. Celles-ci vous montrent en un clin d'oeil quels fichiers ont été modifiés. Référez-vous à Section 4.7.1, « Recouvrement d'icônes » pour découvrir que représentent les différentes icônes. 4.1.2. Menus contextuels Guide d'utilisation quotidienne 38 Figure 4.2. Menu contextuel pour un répertoire sous contrôle de version Toutes les commandes de TortoiseSVN sont invoquées à partir du menu contextuel de l'explorateur Windows. La plupart sont directement visibles quand vous faites un clic droit sur un fichier ou sur un dossier. Les commandes disponibles dépendent si le fichier ou le dossier ou son dossier parent sont sous contrôle de version ou non. Vous pouvez aussi voir le menu TortoiseSVN comme un partie du menu fichier de l'Explorateur. Guide d'utilisation quotidienne 39 Astuce Quelques commandes qui sont très rarement utilisées ne sont accessibles que dans l'extension du menu contextuel. Pour afficher cette extension, appuyer sur Shift au moment où vous faites le click-droit. Dans certains cas, vous pouvez voir plusieurs entrées TortoiseSVN. Ce n'est pas un bug ! Figure 4.3. Menu fichier de l'Explorateur pour un raccourci dans un répertoire non versionné Cet exemple est pour un raccourci non versionné dans un dossier versionné et dans le menu de fichier de l'Explorateur il y a trois entrées pour TortoiseSVN. L'une est pour le dossier, une autre pour le raccourci lui-même et la troisième pour l'objet sur lequel pointe le raccourci. Pour vous aider à les distinguer entre elles, les icônes ont un indicateur dans le coin inférieur droit pour montrer si l'entrée de menu est pour un fichier, un dossier, un raccourci ou pour des plusieurs éléments sélectionnés. Guide d'utilisation quotidienne 40 Si vous êtes un utilisateur de Windows 2000 vous verrez le menu contextuel sans icone. Nous savons que cela fonctionnait dans les versions précédentes, mais Microsoft has changed the way its icon handlers work for Vista, requiring us to use a different display method which unfortunately does not work on Windows 2000. 4.1.3. Glisser-déposer Figure 4.4. Menu pour un répertoire sous contrôle de version lors d'un glisser- déplacer avec le bouton droit D'autres commandes sont disponibles par glisser-déposer, quand vous glissez-déposez avec le bouton droit des fichiers ou des dossiers vers un nouvel emplacement à l'intérieur des copies de travail ou quand vous glissez-déposez avec le bouton droit un fichier non versionné ou un dossier dans un répertoire qui est sous contrôle de version. 4.1.4. Raccourcis communs Quelques opérations communes ont des raccourcis Windows bien connus, mais qui n'apparaissent ni sur les boutons ni dans les menus. Si vous ne savez pas comment faire quelque chose d'évident, comme le rafraîchissement d'une vue, regardez ici. F1 L'aide, bien sûr. F5 Rafraîchir la vue courante. C'est peut-être la commande d'une touche la plus utile. Par exemple... Dans l'Explorateur cela rafraîchira le recouvrement des icônes sur votre copie de travail. Dans la boîte de dialogue de livraison il re-parcourra la copie de travail pour voir ce qui peut avoir besoin d'être livré. Dans la boîte de dialogue du journal il entrera à nouveau en contact avec le référentiel pour vérifier s'il y a des changements plus récents. Ctrl-A Sélectionner tout. Cela peut être utilisé si vous obtenez un message d'erreur et que vous voulez copier- coller dans un email. Utilisez Ctrl-A pour choisir le message d'erreur et ensuite... Ctrl-C ... Copier le texte choisi. Guide d'utilisation quotidienne 41 4.1.5. Authentification Si le référentiel auquel vous essayez d'avoir accès est protégé par un mot de passe, une boîte de dialogue d'identification s'affichera. Figure 4.5. Boîte de dialogue d'authentification Entrez votre nom d'utilisateur et votre mot de passe. La case à cocher fera que TortoiseSVN stockera les accréditations dans le répertoire de Subversion par défaut : %APPDATA%\Subversion\auth dans trois sous-répertoires : ? svn.simple contient les accréditations pour l'authentification de base (nom d'utilisateur/mot de passe). ? svn.ssl.server contient des certificats serveur SSL. ? svn.username contient les accréditations pour l'authentification avec le nom d'utilisateur uniquement (aucun mot de passe nécessaire). Si vous voulez effacer le cache d'authentification pour tous les serveurs, vous pouvez le faire à partir de la page Données Sauvegardées de la boîte de dialogue de configuration de TortoiseSVN. Ce bouton effacera toutes les données d'authentification gardées en cache dans les répertoire auth de Subversion, aussi bien que les authentifications stockées par des versions précédemment installées de TortoiseSVN. Référez-vous à Section 4.30.6, « Configuration des données sauvegardées ». Certains préfèrent que leurs données d'identification soient supprimées à l'ouverture ou à la fermeture de Windows. Le moyen de le faire est d'utiliser un script de fermeture pour supprimer le répertoire %APPDATA%\Subversion\auth, i.e. @echo off rmdir /s /q "%APPDATA%\Subversion\auth" Vous pouvez trouver le mode d'emploi pour installer ce type de script à cette adresse windows-help- central.com [http://www.windows-help-central.com/windows-shutdown-script.html]. Guide d'utilisation quotidienne 42 Pour plus d'informations sur la façon de mettre en place l'authentification et le contrôle d'accès pour votre serveur, référez-vous à Section 3.5, « Accéder au référentiel » 4.1.6. Maximiser les fenêtres Beaucoup de fenêtres de TortoiseSVN ont nombre d'informations à afficher, mais il est souvent plus utile de maximiser leur largeur ou leur hauteur plutôt que de les afficher en plein écran. Pour ce faire, il y a des raccourcis dans le bouton Maximiser. Utilisez le bouton du milieu de la souris pour agrandir la hauteur, et le bouton droit de la souris pour élargir. 4.2. Importer des données dans un référentiel 4.2.1. Importer Si vous importez des éléments dans un référentiel contenant déjà des projets, alors la structure du référentiel aura déjà été décidée. Si vous importez des éléments dans un nouveau référentiel alors il est temps de penser comment vous souhaitez l'organiser. Lisez Section 3.1.5, « Disposition du référentiel » pour avoir des conseils. Cette section décrit la commande Importer, qui a été faite pour importer une arborescence de répertoire dans le référentiel en une action. Bien que cette commande fonctionne, elle a quelques défauts: ? Il n'y a aucun moyen de sélectionner des éléments à inclure, à part en utilisant le filtre global des fichiers à ignorer. ? Le répertoire importé ne devient pas une copie de travail. Vous devez faire une extraction pour en avoir une directement du serveur. ? Il est aisé de se tromper de répertoire à importer dans le référentiel. Pour ces raisons nous recommandons d'utiliser la méthode en deux étapes descrite dans : Section 4.2.2, « Importer en place »au lieu de cette commande . Mais puisque vous êtes là, c'est le fonctionnement de la commande Importer... Avant que vous n'importiez votre projet dans un référentiel, vous devriez : 1. Supprimez tous les fichiers qui ne sont pas nécessaires pour générer le projet (fichiers temporaire, fichiers produits par un compilateur par exemple *.obj, binaires compilés...) 2. Organisez les fichiers en dossiers et sous-dossiers. Bien qu'il soit possible de renommer/déplacer les fichiers plus tard, il est fortement recommandé d'obtenir la structure de votre projet juste avant l'importation ! Choisissez maintenant le dossier de niveau supérieur de votre structure de répertoire de projet dans l'explorateur Windows et faite un clic droit pour ouvrir le menu contextuel. Choisissez la commande TortoiseSVN ? Importer... qui fait s'afficher une boîte de dialogue : Guide d'utilisation quotidienne 43 Figure 4.6. Le boîte de dialogue Importer Dans la boite de dialogue, vous devez entrer l'URL du référentiel dans lequel vous souhaitez importer le projet. Il est important de comprendre que le répertoire local que vous importez n'apparaitra pas dans le référentiel, mais juste son contenu.Par exemple, si vous avez la structure suivant : C:\Projects\Widget\source C:\Projects\Widget\doc C:\Projects\Widget\images et que vous importez C:\Projects\Widget dans http://monnomdedomaine.com/svn/ trunk vous serez alors surpris de voir que vos sous répertoires iront directement dans trunk au lieu d'être dans un répertoire Widget. Vous devez spécifier le sous répertoire comme faisant partie de l'URL, http://monnomdedomaine.com/svn/trunk/Widget-X. Notez que la commande importer créera automatiquement les sous répertoires dans le référentiel s'ils n'existent pas. Le message d'importation est utilisé comme un commentaire. Par défaut, les fichiers et les dossiers qui correspondent au filtre d'exclusion ne sont pas importés. Pour ignorer ce comportement, vous pouvez utiliser la case à cocher Inclure les fichiers ignorés. Référez- vous à Section 4.30.1, « Configuration générale » pour plus d'informations sur la configuration d'un filtre d'exclusion. As soon as you press OK TortoiseSVN imports the complete directory tree including all files into the repository. The project is now stored in the repository under version control. Please note that the folder you imported is NOT under version control! To get a version-controlled working copy you need to do a Checkout of the version you just imported. Or read on to find out how to import a folder in place. 4.2.2. Importer en place Si vous disposez déjà d'un référentiel, et que vous souhaitez y ajouter une nouvelle arborescence, suivez les étapes suivantes : Guide d'utilisation quotidienne 44 1. Utiliser l'explorateur de référentiel pour créer un nouveau projet directement dans le référentiel. 2. Extrait le nouveau répertoire au dessus du répertoire que vous voulez importer. Un message sera affiché, indiquant que le répertoire n'est pas vide. Vous disposez maintenant d'un répertoire parent versionné, dont le contenu n'est pas sous contrôle de version. 3. Sélectionnez TortoiseSVN ? Ajouter... sur le répertoire sous contrôle de version pour ajouter un ou des éléments. Vous pouvez ajouter ou supprimer des fichiers, activez les propriétés svn:ignore sur les répertoires et faites toutes les modifications dont vous avez besoin. 4. Livrez le répertoire de plus haut niveau, et vous aurez une nouvelle arborescence versionnée, et une copie de travail locale, créée depuis votre répertoire existant. 4.2.3. Fichiers spéciaux Parfois vous avez besoin d'avoir un fichier sous contrôle de version qui contient des données spécifiques à l'utilisateur. Cela signifie que vous avez un fichier que chaque développeur/utilisateur doit modifier pour convenir à son paramétrage local. Mais versionner un tel fichier est difficile parce que chaque utilisateur livrerait ses changements chaque fois au référentiel. In such cases we suggest to use template files. You create a file which contains all the data your developers will need, add that file to version control and let the developers check this file out. Then, each developer has to make a copy of that file and rename that copy. After that, modifying the copy is not a problem anymore. Comme exemple, vous pouvez regarder le script de construction de TortoiseSVN. Il appelle un fichier nommé TortoiseVars.bat qui n'existe pas dans le référentiel. Uniquement le fichier TortoiseVars.tmpl. TortoiseVars.tmpl est le fichier de modèle dont chaque développeur doit créer une copie et renommer ce fichier en TortoiseVars.bat. À l'intérieur de ce fichier, nous avons ajouté des commentaires pour que les utilisateurs voient quelles lignes ils doivent éditer et changer selon leur paramétrage local pour qu'il marche. Afin de ne pas déranger les utilisateurs, nous avons aussi ajouté le fichier TortoiseVars.bat à la liste des ignorés de son dossier parent, c'est-à-dire nous avons mis la propriété Subversion svn:ignore pour inclure ce nom de fichier. De cette façon il n'apparaîtra pas comme non versionné à chaque livraison. 4.3. Extraire une copie de travail Pour obtenir une copie de travail vous devez faire une extraction à partir d'un référentiel. Choisissez un répertoire dans l'explorateur Windows où vous voulez placer votre copie de travail. Faites un clic droit pour afficher le menu contextuel et choisissez la commande TortoiseSVN ? Extraire..., qui affiche la boîte de dialogue suivante : Guide d'utilisation quotidienne 45 Figure 4.7. La boîte de dialogue Extraire Si vous entrez un nom de dossier qui n'existe pas encore, alors un répertoire sera créé avec ce nom. 4.3.1. Profondeur d'extraction Vous pouvez choisir la profondeur que vous voulez extraire, ce qui vous permet de spécifier la profondeur de récursion dans les sous répertoires. Si vous voulez juste une partie d'une grosse arborescence , Vous pouvez n'extraire que le répertoire de plus haut niveau, et mettre à jour les sous répertoires petit à petit. Totalement récursive Extraire l'arborescence complète, incluant récursivement tous les sous répertoires. Descendants directs, y compris les répertoires Extrait le répertoire spécificé, tous les fichiers et sous répertoires compris, mais ne remplit pas les sous répertoires. Juste les fichiers Extrait le répertoire spécifie, y compris les fichiers mais n'extrait aucune sous répertoire. Uniquement cet élément. Extraire juste le répertoire. Ne pas le remplir avec les répertoires et fichiers enfants. Copie de travail Se souvenir de la profondeur dans la version de travail. Cette option n'est pas utilisée dans la fenêtre d'extraction, mais c'est la valeur qui sera utilisée par éfaut pour toutes les autres fenêtres ayant cette option. Exclude Used to reduce working copy depth after a folder has already been populated. This option is only available in the Update to revision dialog. Si vous n'extrayez qu'une portion de l'arboresence (en décochant la case récursivement), vous pouvez lister d'autres sous répertoires via l'explorateur de référentiel (Section 4.24, « l'explorateur de référentiel ») ou la fenêtre de vérification des modifications (Section 4.7.3, « Statut local et distant »). In the repository browser, Right click on the checked out folder, then use TortoiseSVN ? Repo- Browser to bring up the repository browser. Find the sub-folder you would like to add to your working Guide d'utilisation quotidienne 46 copy, then use Context menu ? Update item to revision... That menu will only be visible if the selected item does not exist yet in your working copy, but the parent item does exist. In the check for modifications dialog, first click on the button Check repository. The dialog will show all the files and folders which are in the repository but which you have not checked out as remotely added. Right click on the folder(s) you would like to add to your working copy, then use Context menu ? Update. This feature is very useful when you only want to checkout parts of a large tree, but you want the convenience of updating a single working copy. Suppose you have a large tree which has sub- folders Project01 to Project99, and you only want to checkout Project03, Project25 and Project76/SubProj. Use these steps: 1. Extrait le répertoire parent avec la profondeur « Juste cet élément » Vous avez maintenant un répertoire de haut niveau vide. 2. Sélectionnez le nouveau répertoire et utilisez la commande TortoiseSVN ? Explorateur de référentiel pour voir le contenu du référentiel. 3. Faites un click droit sur Project03 et Menu contextuel ? Mettre à jour à la révision.... Laissez les paramètres par défaut et cliquez sur OK. Ce répertoire est a présent complet. Répéter le même processus pour Project25.. 4. Allez dans Project76/SubProj et faites de même. Cette fois ci, notez que le répertoire Project76 est vide excepté SubProj, lequel est complètement rempli. Subversion a créé pour vous les répertoires intermédiaires sans les remplir. Changing working copy depth Once you have checked out a working copy to a particular depth you can change that depth later to get more or less content using Context menu ? Update item to revision.... Utilisant un serveur ancien Les serveurs de version inférieure à 1.5 ne supportent pas la notion de profondeur de la copie de travail, ils n'interprêtent donc pas efficacement les requêtes l'utilisant. Les commande fonctionneront, mais un vieux serveur retournera toutes les données, laissant le client filtrer ce qui n'est pas requis, ce qui augmentera le traffic sur le réseau. Si possible, vous devriez mettre à jour votre serveur. Si le projet contient des références à des projets externes que vous ne voulez pas extraire en même temps, utilisez la case à cocher Omettre les externes . Important If Omit externals is checked, or if you wish to increase the depth value, you will have to perform updates to your working copy using TortoiseSVN ? Update to Revision... instead of TortoiseSVN ? Update. The standard update will include all externals and keep the existing depth. It is recommended that you check out only the trunk part of the directory tree, or lower. If you specify the parent path of the directory tree in the URL then you might end up with a full hard disk since you will get a copy of the entire repository tree including every branch and tag of your project! Guide d'utilisation quotidienne 47 Exporter Parfois vous pouvez avoir envie de créer une copie locale sans aucun de ces répertoires .svn, pour créer un paquet zippé de vos sources par exemple. Lisez Section 4.26, « Exporter une copie de travail Subversion » pour savoir comment le faire. 4.4. Livrer vos changements au référentiel Envoyer les changements que vous avez faits dans votre copie de travail est connue comme livrer les changements. Mais avant de livrer vous devez vous assurer que votre copie de travail est à jour. Vous pouvez soit utiliser directement TortoiseSVN ? Mettre à jour. Ou vous pouvez utiliser TortoiseSVN ? Vérifier les modifications d'abord, pour voir quels fichiers ont été changés localement ou sur le serveur. 4.4.1. La boîte de dialogue Livrer Si votre copie de travail est à jour et s'il n'y a aucun conflit, vous êtes prêts à livrer vos changements. Choisissez n'importe quel fichier et/ou dossier que vous voulez livrer, puis TortoiseSVN ? Livrer.... Figure 4.8. La boîte de dialogue Livrer La boîte de dialogue Livrer vous montrera chaque fichier changé, y compris les fichiers ajoutés, supprimés et non versionnés. Si vous ne voulez pas qu'un fichier modifié soit livré, décochez juste ce fichier. Si vous voulez inclure un fichier non versionné, cochez juste ce fichier pour l'ajouter à la livraison. Guide d'utilisation quotidienne 48 Les éléments qui ont été commutés vers un chemin de référentiel différent sont aussi indiqués en utilisant un marqueur (s). Vous pouvez avoir commuté quelque chose en travaillant sur une branche et avoir oublié de rebasculer sur le tronc. C'est votre signe d'alarme! Livrer des fichiers ou des dossiers ? Quand vous livrez des fichiers, la boîte de dialogue Livrer montre seulement les fichiers que vous avez choisis. Quand vous livrez un dossier, la boîte de dialogue Livrer choisira les fichiers modifiés automatiquement. Si vous oubliez un nouveau fichier que vous avez créé, livrer le dossier le trouvera de toute façon. La livraison d'un dossier ne veut pas dire que chaque fichier est marqué comme changé ; il rendre juste votre vie plus facile en faisant plus de travail pour vous. Si vous avez modifié des fichiers qui ont été inclus à partir d'un référentiel différent en utilisant svn:externals, ces changements ne peuvent pas être inclus dans la même livraison atomique. Un symbole d'avertissement au-dessous de la liste de fichier vous indique si cela se produit et l'info-bulle explique que ces fichiers externes doivent être livrés séparément. Beaucoup de fichiers non versionnés dans la boîte de dialogue Livrer Si vous pensez que la boîte de dialogue Livrer de TSVN vous montre trop de fichiers non versionnés (générés par la compilation ou sauvegarde de votre éditeur par exemple), il y a plusieurs solutions. Vous pouvez : ? ajouter le fichier (ou une extension de caractère de remplacement) à la liste de fichiers pour exclure sur la page de configuration. Cela affectera toutes vos copies de travail. ? ajouter le fichier à la liste svn:ignore en utilisant TortoiseSVN ? Ajouter à la liste des ignorés Cela affectera seulement le répertoire sur lequel vous mettez la propriété svn:ignore. En utilisant la boîte de dialogue de propriétés SVN, vous pouvez changer la propriété svn:ignore pour un répertoire. Lire Section 4.13, « Ignorer des fichiers et des répertoires » pour plus d'informations. Double-cliquer sur un fichier modifié dans la boîte de dialogue Livrer lancera l'outil externe de différenciation pour afficher vos changements. Le menu contextuel vous donnera plus d'options, comme affiché sur la capture d'écran. Vous pouvez aussi glissez les fichiers vers une autre application comme un éditeur de texte ou un IDE à partir d'ici. Vous pouvez sélectionner ou désélectionner des éléments en cliquant sur la case à coser située à leur gauche. Pour les répertoires, vous pouvez utiliser Shift-sélectionner pour le faire récursivement. The columns displayed in the bottom pane are customizable. If you right click on any column header you will see a context menu allowing you to select which columns are displayed. You can also change column width by using the drag handle which appears when you move the mouse over a column boundary. These customizations are preserved, so you will see the same headings next time. By default when you commit changes, any locks that you hold on files are released automatically after the commit succeeds. If you want to keep those locks, make sure the Keep locks checkbox is checked. The default state of this checkbox is taken from the no_unlock option in the Subversion configuration file. Read Section 4.30.1, « Configuration générale » for information on how to edit the Subversion configuration file. Guide d'utilisation quotidienne 49 Glisser-déposer Vous pouvez glisser des fichiers dans la boîte de dialogue Livrer d'ailleurs, tant que les copies de travail sont extraites du même référentiel. Par exemple, vous pouvez avoir une copie de travail énorme avec plusieurs fenêtres d'explorateur ouvertes pour regarder les dossiers éloignés de la hiérarchie. Si vous voulez éviter de livrer le dossier de niveau supérieur (avec un long parcours du dossier pour vérifier les changements) vous pouvez ouvrir la boîte de dialogue de livraison pour un répertoire et y glisser des éléments des autres fenêtres pour les inclure dans la même livraison atomique. Vous pouvez faire glisser les fichiers non versionnés de votre copie de travail dans la fenêtre de livraison, ils seront alors automatiquement ajoutés au référentiel. Réparation des renommages externes Sometimes files get renamed outside of Subversion, and they show up in the file list as a missing file and an unversioned file. To avoid losing the history you need to notify Subversion about the connection. Simply select both the old name (missing) and the new name (unversioned) and use Context Menu ? Repair Move to pair the two files as a rename. 4.4.2. Listes de changements La fenêtre de livraison supporte la fonctionnalité liste des modifications de Subversion et s'en sert pour grouper les fichiers. Pour en savoir plus sur cette fonctionnalité vois Section 4.8, « Listes de changements ». 4.4.3. Exclude des éléments de la livraison Sometimes you have versioned files that change frequently but that you really don't want to commit. Sometimes this indicates a flaw in your build process - why are those files versioned? should you be using template files? But occasionally it is inevitable. A classic reason is that your IDE changes a timestamp in the project file every time you build. The project file has to be versioned as it includes all the build settings, but it doesn't need to be committed just because the timestamp changed. Pour améliorer le traitement de cas bizarres, nous avons créé une liste de modification appelée ignorer à la livraison. Tout fichier ajouté dans cette liste sera automatiquement décoché dans la fenêtre de livraison. Vous pouvez cependant toujours livrer les modifications en cochant manuellement les fichiers à livrer dans la fenêtre de livraison. 4.4.4. Commentaires de livraison Assurez-vous d'entrer un commentaire qui décrit les changements que vous livrez. Cela vous aidera à voir ce qui est arrivé et quand, lorsque vous naviguerez dans les commentaires du projet à une date ultérieure. Le message peut être aussi long ou aussi court que vous le souhaitez ; beaucoup de projets ont des directives pour ce qui devrait être inclus, la langue à utiliser et parfois même un format strict. Vous pouvez appliquer un formatage simple à vos commentaires en utilisant une convention similaire à celle utilisée dans les emails. Pour appliquer un style au text, utilisez *texte* pour le gras, _texte_ pour souligner, et ^texte^ pour l'italique. Guide d'utilisation quotidienne 50 Figure 4.9. Le vérificateur d'orthographe de la boîte de dialogue Livrer TortoiseSVN inclut un vérificateur d'orthographe pour vous aider à obtenir des commentaires corrects. Il mettra en évidence les mots mal orthographiés. Utilisez le menu contextuel pour avoir accès aux corrections suggérées. Bien sûr, il ne connaît pas tous les termes techniques comme vous, donc parfois les mots correctement orthographiés s'afficheront en tant qu'erreurs. Mais ne vous inquiétez pas. Vous pouvez simplement les ajouter à votre dictionnaire personnel en utilisant le menu contextuel. The log message window also includes a filename and function auto-completion facility. This uses regular expressions to extract class and function names from the (text) files you are committing, as well as the filenames themselves. If a word you are typing matches anything in the list (after you have typed at least 3 characters, or pressed Ctrl+Space), a drop-down appears allowing you to select the full name. The regular expressions supplied with TortoiseSVN are held in the TortoiseSVN installation bin folder. You can also define your own regexes and store them in %APPDATA%\TortoiseSVN\autolist.txt. Of course your private autolist will not be overwritten when you update your installation of TortoiseSVN. If you are unfamiliar with regular expressions, take a look at the introduction at http://en.wikipedia.org/wiki/ Regular_expression, and the online documentation and tutorial at http://www.regular-expressions.info/. Vous pouvez réutiliser les messages de livraison des livraisons précédentes. Cliquez juste sur Messages récents pour en voir la liste. Le nombre de messages à garder en mémoire peut être modifié dans la fenêtre de propriété de TortoiseSVN. Vous pouvez supprimer tous les messages de livraison depuis la page Données Sauvegardées de la fenêtre de Configuration de TortoiseSVN, vous pouvez également supprimer les messages précisément depuis la boite de dialogue Messages Récents en utillisant la toucje Suppr. If you want to include the checked paths in your log message, you can use the command Context Menu ? Paste filename list in the edit control. Une autre façon d'insérer des chemins dans les messages informatifs est simplement de glisser/déposer les fichiers depuis la liste des fichiers dans le champs d'édition du message. Guide d'utilisation quotidienne 51 Propriétés de dossier spéciales Il y a plusieurs propriétés de dossier spéciales qui peuvent être utilisées pour aider donner plus de contrôle sur le formatage des commentaires de livraison et la langue utilisée par le module de vérificateur d'orthographe. Lisez Section 4.17, « Configuration des projets » pour plus d'informations. Intégration aux outils de Bug tracking If you have activated the bug tracking system, you can set one or more Issues in the Bug- ID / Issue-Nr: text box. Multiple issues should be comma separated. Alternatively, if you are using regex-based bug tracking support, just add your issue references as part of the log message. Learn more in Section 4.28, « Intégration avec des systèmes de bug tracking / traqueurs d'incidents ». 4.4.5. Progression de la Livraison Après avoir appuyé sur OK, une boîte de dialogue apparaît affichant la progression de la livraison. Figure 4.10. La boîte de dialogue de progression montrant une livraison en cours La boîte de dialogue de progression utilise un code couleur pour mettre en évidence les diverses actions de la livraison Bleu Livraison d'une modification. Pourpre Livraison d'un nouvel ajout. Rouge foncé Livraison d'une suppression ou d'un remplacement. Noir Tous les autres éléments. C'est la combinaison de couleur par défaut, mais vous pouvez personnaliser ces couleurs en utilisant la boîte de dialogue de configuration. Lisez Section 4.30.1.4, « Configuration des couleurs de TortoiseSVN » pour plus d'informations. Guide d'utilisation quotidienne 52 4.5. Mettre à jour votre copie de travail avec les changements des autres Figure 4.11. la boîte de dialogue de progression montrant une mise à jour terminée Periodically, you should ensure that changes done by others get incorporated in your local working copy. The process of getting changes from the server to your local copy is known as updating. Updating may be done on single files, a set of selected files, or recursively on entire directory hierarchies. To update, select the files and/or directories you want, right click and select TortoiseSVN ? Update in the explorer context menu. A window will pop up displaying the progress of the update as it runs. Changes done by others will be merged into your files, keeping any changes you may have done to the same files. The repository is not affected by an update. La boîte de dialogue de progression utilise un code couleur pour mettre en évidence les diverses actions de la mise à jour Pourpre Nouvel élément ajouté à votre CdT. Rouge foncé Élément redondant supprimé de votre CdT, ou élément manquant remplacé dans votre CdT. Vert Changements du référentiel fusionnés avec vos changements locaux avec succès. Rouge clair Changements du référentiel fusionnés avec des changements locaux, aboutissant à des conflits que vous devez résoudre. Noir Élément inchangé dans votre CdT mis à jour par une version plus récente du référentiel. C'est la combinaison de couleur par défaut, mais vous pouvez personnaliser ces couleurs en utilisant la boîte de dialogue de configuration. Lisez Section 4.30.1.4, « Configuration des couleurs de TortoiseSVN » pour plus d'informations. If you get any conflicts during an update (this can happen if others changed the same lines in the same file as you did and those changes don't match) then the dialog shows those conflicts in red. You can double click on these lines to start the external merge tool to resolve the conflicts. Guide d'utilisation quotidienne 53 Quand la mise à jour est terminée, la boîte de dialogue de progression affiche sous la liste des fichiers un résumé du nombre d'éléments mis à jour, ajoutés, supprimés, en conflit, etc. Ce résumé d'information peut être copié dans le presse-papiers en utilisant Ctrl+C. The standard Update command has no options and just updates your working copy to the HEAD revision of the repository, which is the most common use case. If you want more control over the update process, you should use TortoiseSVN ? Update to Revision... instead. This allows you to update your working copy to a specific revision, not only to the most recent one. Suppose your working copy is at revision 100, but you want it to reflect the state which it had in revision 50 - then simply update to revision 50. In the same dialog you can also choose the depth at which to update the current folder. The terms used are described in Section 4.3.1, « Profondeur d'extraction ». The default depth is Working copy, which preserves the existing depth setting. You can also choose whether to ignore any external projects in the update (i.e. projects referenced using svn:externals). Attention If you update a file or folder to a specific revision, you should not make changes to those files. You will get « out of date » error messages when you try to commit them! If you want to undo changes to a file and start afresh from an earlier revision, you can rollback to a previous revision from the revision log dialog. Take a look at Section B.4, « Annuler des révisions dans le référentiel » for further instructions, and alternative methods. Update to Revision can occasionally be useful to see what your project looked like at some earlier point in its history. But in general, updating individual files to an earlier revision is not a good idea as it leaves your working copy in an inconsistent state. If the file you are updating has changed name, you may even find that the file just disappears from your working copy because no file of that name existed in the earlier revision. You should also note that the item will show a normal green overlay, so it is indistinguishable from files which are up-to-date. If you simply want a local copy of an old version of a file it is better to use the Context Menu ? Save revision to... command from the log dialog for that file. Plusieurs fichiers / répertoires Si vous choisissez plusieurs fichiers et plusieurs dossiers dans l'explorateur et sélectionnez ensuite Mettre à jour, tous ces fichiers/dossiers sont mis à jour un par un. TortoiseSVN s'assure que tous les fichiers/dossiers qui sont du même référentiel sont mis à jour à la même révision exacte ! Même si une autre livraison se produit entre ces mises à jour. Le fichier local existe déjà Parfois quand vous essayez de mettre à jour, la mise à jour échoue avec un message disant qu'il y a déjà un fichier local du même nom. Cela arrive typiquement quand Subversion essaye d'extraire un fichier nouvellement versionné et constate qu'un fichier non versionné du même nom existe déjà dans votre dossier de travail. Subversion n'écrasera jamais un fichier non versionné - il pourrait contenir quelque chose sur lequel vous travaillez, qui a par hasard le même nom de fichier qu'un autre développeur a utilisé pour son fichier nouvellement livré. Si vous obtenez ce message d'erreur, la solution est simplement de renommer le fichier local non versionné. Une fois la mise à jour terminée, vous pouvez vérifier si le fichier renommé est toujours nécessaire. Guide d'utilisation quotidienne 54 Si vous continuez à obtenir des messages d'erreur, utilisez TortoiseSVN ? Vérifier les modifications pour lister tous les fichiers à problème à la place. De cette façon vous pouvez tous les traiter d'un coup. 4.6. Résoudre des conflits De temps en temps , vous aurez un conflit au moment de mettre à jour/fusionner vos fichiers avec le référentiel ou lorsque vous migrerez votre copie de travail vers une autre URL. Il y a deux sortes de conflits: Conflit de fichier Un conflit sur un fichier arrive si deux (ou plus) développeurs changent les mêmes lignes d'un fichier. Conflits dans l'arborescence Un conflit dans l'arborescence arrive quand un développeur déplace/renomme/supprime un fichier ou un dossier, qu'un autre développeur a aussi déplacé/renommé/supprimé voire juste modifié. 4.6.1. Conflit de fichiers A file conflict occurs when two or more developers have changed the same few lines of a file. As Subversion knows nothing of your project, it leaves resolving the conflicts to the developers. Whenever a conflict is reported, you should open the file in question, and search for lines starting with the string <<<<<<<. The conflicting area is marked like this: <<<<<<< filename your changes ======= code merged from repository >>>>>>> revision Also, for every conflicted file Subversion places three additional files in your directory: nom_du_fichier.ext.mine C'est votre fichier comme il a existé dans votre copie de travail avant que vous mettiez à jour votre copie de travail - c'est-à-dire sans marqueurs de conflit. Ce fichier a vos derniers changements et rien d'autre. nom_du_fichier.ext.rOLDREV C'est le fichier qui était la révision de BASE avant que vous mettiez à jour votre copie de travail. C'est-à-dire le fichier que vous avez extrait avant de faire votre dernière édition. nom_du_fichier.ext.rNEWREV C'est le fichier que votre client de Subversion venait de recevoir du serveur quand vous avez mis à jour votre copie de travail. Ce fichier correspond à la révision de tête du référentiel. Vous pouvez soit lancer un outil externe de fusion / un éditeur de conflit avec TortoiseSVN ? Éditer les conflits soit utiliser un autre éditeur pour résoudre le conflit manuellement. Vous devrez décider à quoi devrait ressembler le code, faites les changements nécessaires et sauvegardez le fichier. Exécutez ensuite la commande TortoiseSVN ? Résolu... et livrez vos modifications au référentiel. Veuillez noter que la commande de résolution ne résout pas vraiment le conflit. Il supprime juste les fichiers nom_du_fichier.ext.mine et nom_du_fichier.ext.r*, pour vous permettre de livrer vos changements. Guide d'utilisation quotidienne 55 Si vous avez des conflits avec des fichiers binaires, Subversion n'essaye pas de fusionner les fichiers lui-même. Le fichier local reste inchangé (exactement comme la dernière fois que vous l'avez modifié) et vous avez des fichiers nom_du_fichier.ext.r*. Si vous voulez renoncer à vos changements et garder la version du référentiel, utilisez simplement la commande Revenir en arrière. Si vous voulez garder votre version et écraser la version du référentiel, utilisez la commande Résolu..., livrez ensuite votre version. Vous pouvez utiliser la commande Résolu... pour plusieurs fichiers si vous faites un clic droit sur le dossier parent et sélectionnez TortoiseSVN ? Résolu... Cela affichera une boîte de dialogue listant tous les fichiers en conflit dans ce dossier et vous pouvez choisir lesquels marquer comme résolus. 4.6.2. Conflits dans l'arborescence A tree conflict occurs when a developer moved/renamed/deleted a file or folder, which another developer either also has moved/renamed/deleted or just modified. There are many different situations that can result in a tree conflict, and all of them require different steps to resolve the conflict. When a file is deleted locally in Subversion, the file is also deleted from the local file system, so even if it is part of a tree conflict it cannot show a conflicted overlay and you cannot right click on it to resolve the conflict. Use the Check for Modifications dialog instead to access the Edit conflicts option. TortoiseSVN can help find the right place to merge changes, but there may be additional work required to sort out the conflicts. Remember that after an update the working BASE will always contain the revision of each item as it was in the repository at the time of update. If you revert a change after updating it goes back to the repository state, not to the way it was when you started making your own local changes. 4.6.2.1. Suppression locale, édition de la mise à jour 1. Le développeur A modifie Foo.c et en fait la livraison 2. Developer B has simultaneously moved Foo.c to Bar.c in his working copy, or simply deleted Foo.c or its parent folder. Une mise à jour de la copie de travail du développeur B mène à un conflit dans l'arborescence: ? Foo.c has been deleted from working copy, but is marked with a tree conflict. ? If the conflict results from a rename rather than a delete then Bar.c is marked as added, but does not contain developer A's modifications. Developer B now has to choose whether to keep Developer A's changes. In the case of a file rename, he can merge the changes to Foo.c into the renamed file Bar.c. For simple file or directory deletions he can choose to keep the item with Developer A's changes and discard the deletion. Or, by marking the conflict as resolved without doing anything he effectively discards Developer A's changes. The conflict edit dialog offers to merge changes if it can find the original file of the renamed Bar.c. Depending on where the update was invoked, it may not be possible to find the source file. 4.6.2.2. Modification locale, suppression dans la mise à jour 1. Developer A moves Foo.c to Bar.c and commits it to the repository. 2. Developer B modifies Foo.c in his working copy. Ou dans le cas d'un déplacement de répertoire ... 1. Developer A moves parent folder FooFolder to BarFolder and commits it to the repository. 2. Developer B modifies Foo.c in his working copy. Guide d'utilisation quotidienne 56 An update of developer B's working copy results in a tree conflict. For a simple file conflict: ? Bar.c is added to the working copy as a normal file. ? Foo.c is marked as added (with history) and has a tree conflict. Pour un conflit de répertoire: ? BarFolder is added to the working copy as a normal folder. ? FooFolder is marked as added (with history) and has a tree conflict. Foo.c est marqué comme modifié. Developer B now has to decide whether to go with developer A's reorganisation and merge her changes into the corresponding file in the new structure, or simply revert A's changes and keep the local file. To merge her local changes with the reshuffle, Developer B must first find out to what filename the conflicted file Foo.c was renamed/moved in the repository. This can be done by using the log dialog. The changes must then be merged by hand as there is currently no way to automate or even simplify this process. Once the changes have been ported across, the conflicted path is redundant and can be deleted. In this case use the Remove button in the conflict editor dialog to clean up and mark the conflict as resolved. If Developer B decides that A's changes were wrong then she must choose the Keep button in the conflict editor dialog. This marks the conflicted file/folder as resolved, but Developer A's changes need to be removed by hand. Again the log dialog helps to track down what was moved. 4.6.2.3. Suppression locale, suppression dans la mise à jour 1. Developer A moves Foo.c to Bar.c and commits it to the repository 2. Le développeur B renomme Foo.c en Bix.c Une mise à jour de la copie de travail du développeur B mène à un conflit dans l'arborescence: ? Bix.c est marqué comme ajouté avec l'historique. ? Bar.c est ajouté dans la copie de travail avec le statut 'normal'. ? Foo.c is marked as deleted and has a tree conflict. Pour résoudre ce conflit, le développeur B doit trouver à quel fichier renommé/déplacé correspond la version conflictueuse de Foo.c dans le référentiel. Ce peut être fait en utilisant la fenêtre de log. Le développeur B doit alors décider quel nouveau nom de lename>Foo.c Dès que le développeur B a résolu manuellement le conflit, l'arborescence des conflits doit être marquée comme résolue grâce au bouton approprié dans la fenêtre d'édition des conflits. 4.6.2.4. Copie locale incomplète, modification dans la mise à jour 1. Developer A working on trunk modifies Foo.c and commits it to the repository 2. Developer B working on a branch moves Foo.c to Bar.c and commits it to the repository A merge of developer A's trunk changes to developer B's branch working copy results in a tree conflict: ? Bar.c is already in the working copy with status 'normal'. ? Foo.c est marqué comme manquant dans l'arborescence des conflits. Guide d'utilisation quotidienne 57 To resolve this conflict, Developer B has to mark the file as resolved in the conflict editor dialog, which will remove it from the conflict list. She then has to decide whether to copy the missing file Foo.c from the repository to the working copy, whether to merge Developer A's changes to Foo.c into the renamed Bar.c or whether to ignore the changes by marking the conflict as resolved and doing nothing else. Note that if you copy the missing file from the repository and then mark as resolved, your copy will be removed again. You have to resolve the conflict first. 4.6.2.5. Modification locale, suppression dans la fusion 1. Developer A working on trunk moves Foo.c to Bar.c and commits it to the repository 2. Developer B working on a branch modifies Foo.c and commits it to the repository. There is an equivalent case for folder moves, but it is not yet detected in Subversion 1.6 ... 1. Developer A working on trunk moves parent folder FooFolder to BarFolder and commits it to the repository. 2. Developer B working on a branch modifies Foo.c in her working copy. A merge of developer A's trunk changes to developer B's branch working copy results in a tree conflict: ? Bar.c est marqué comme étant ajouté. ? Foo.c est marqué quand ayant été modifié et comme étant en conflit dans l'arborescence. Developer B now has to decide whether to go with developer A's reorganisation and merge her changes into the corresponding file in the new structure, or simply revert A's changes and keep the local file. To merge her local changes with the reshuffle, Developer B must first find out to what filename the conflicted file Foo.c was renamed/moved in the repository. This can be done by using the log dialog for the merge source. The conflict editor only shows the log for the working copy as it does not know which path was used in the merge, so you will have to find that yourself. The changes must then be merged by hand as there is currently no way to automate or even simplify this process. Once the changes have been ported across, the conflicted path is redundant and can be deleted. In this case use the Remove button in the conflict editor dialog to clean up and mark the conflict as resolved. If Developer B decides that A's changes were wrong then she must choose the Keep button in the conflict editor dialog. This marks the conflicted file/folder as resolved, but Developer A's changes need to be removed by hand. Again the log dialog for the merge source helps to track down what was moved. 4.6.2.6. Suppression locale, suppression dans la fusion 1. Developer A working on trunk moves Foo.c to Bar.c and commits it to the repository 2. Developer B working on a branch moves Foo.c to Bix.c and commits it to the repository A merge of developer A's trunk changes to developer B's branch working copy results in a tree conflict: ? Bix.c is marked with normal (unmodified) status. ? Bar.c is marked as added with history. ? Foo.c is marked as missing and has a tree conflict. To resolve this conflict, Developer B has to find out to what filename the conflicted file Foo.c was renamed/moved in the repository. This can be done by using the log dialog for the merge source. The conflict editor only shows the log for the working copy as it does not know which path was used in the merge, so you will have to find that yourself. Guide d'utilisation quotidienne 58 Le développeur B doit alors décider quel nouveau nom de lename>Foo.c Dès que le développeur B a résolu manuellement le conflit, l'arborescence des conflits doit être marquée comme résolue grâce au bouton approprié dans la fenêtre d'édition des conflits. 4.7. Obtenir des information sur le statut Pendant que vous travaillez sur votre copie de travail, vous avez souvent besoin de savoir quels fichiers vous avez changé/ajouté/supprimé ou renommé, ou même quels fichiers ont été changés et livrer par les autres. 4.7.1. Recouvrement d'icônes Figure 4.12. L'Explorateur montrant le recouvrement d'icônes Maintenant que vous avez extrait une copie de travail à partir d'un référentiel Subversion, vous pouvez voir vos fichiers dans l'explorateur Windows avec des icônes changées. C'est une des raisons pour laquelle TortoiseSVN est si populaire. TortoiseSVN ajoute une icône de recouvrement à chaque icône de fichier chevauchant l'icône de fichier originale. Selon le statut Subversion du fichier, l'icône de recouvrement est différente. Une copie de travail fraîchement extraite a une coche verte comme icône de recouvrement. Cela signifie que le statut Subversion est normal. Dès que vous commencez à éditer un fichier, le statut change en modifié et l'icône de recouvrement devient alors en un point d'exclamation rouge. De cette façon, vous pouvez facilement voir quels fichiers ont été modifiés depuis votre dernière mise à jour de la copie de travail et ont donc besoin d'être livrés. Si un conflit se produit lors d'une mise à jour alors l'icône de recouvrement devient un point d'exclamation jaune. Guide d'utilisation quotidienne 59 Si vous avez mis la propriété svn:needs-lock sur un fichier, Subversion met ce fichier en lecture seule jusqu'à ce que vous verrouilliez ce fichier. Ces fichiers ont cette icône de recouvrement pour indiquer que vous devez d'abord les verrouiller pour pouvoir les éditer. Si vous avez verrouilé un fichier et que le statut de Subversion est normal, cette icône de recouvrement vous rappelle que vous devriez relâcher le verrou si vous ne l'utilisez pas pour permettre aux autres utilisateurs de livrer leurs changements. This icon shows you that some files or folders inside the current folder have been scheduled to be deleted from version control or a file under version control is missing in a folder. The plus sign tells you that a file or folder has been scheduled to be added to version control. The bar sign tells you that a file or folder is ignored for version control purposes. This overlay is optional. Cette icone est associée aux éléments qui ne sont pas sous contrôle de version, et qui ne sont pas à ignorer. Cette icone de recouvrement est facultative. In fact, you may find that not all of these icons are used on your system. This is because the number of overlays allowed by Windows is very limited and if you are also using an old version of TortoiseCVS, then there are not enough overlay slots available. TortoiseSVN tries to be a « Good Citizen (TM) » and limits its use of overlays to give other apps a chance too. Now that there are more Tortoise clients around (TortoiseCVS, TortoiseHG, ...) the icon limit becomes a real problem. To work around this, the TortoiseSVN project introduced a common shared icon set, loaded as a DLL, which can be used by all Tortoise clients. Check with your client provider to see if this has been integrated yet :-) Pour avoir une description des icones de recouvrement correspondant aux statuts de Subversion et d'autres détails techniques, lisez Section F.1, « Recouvrement d'icônes ». 4.7.2. Les colonnes de TortoiseSVN dans l'explorateur Windows Les mêmes informations, disponibles avec le recouvrement d'icônes, (et plus encore) peuvent être affichées avec des colonnes supplémentaires dans l'affichage en détail de l'explorateur Windows. Simply right click on one of the headings of a column, choose More... from the context menu displayed. A dialog will appear where you can specify the columns and their order, which is displayed in the « Detailed View ». Scroll down until the entries starting with SVN come into view. Check the ones you would like to have displayed and close the dialog by pressing OK. The columns will be appended to the right of those currently displayed. You can reorder them by drag and drop, or resize them, so that they fit your needs. Important The additional columns in the Windows Explorer are not available on Vista, since Microsoft decided to not allow such columns for all files anymore but only for specific file types. Guide d'utilisation quotidienne 60 Astuce Si vous voulez que la disposition actuelle soit affichée dans toutes vos copies de travail, vous pouvez vouloir en faire la vue par défaut. 4.7.3. Statut local et distant Figure 4.13. Vérifier les modifications Il est souvent très utile de savoir quels fichiers vous avez changé et aussi quels fichiers ont été changés et livrés par les autres. C'est là où la commande TortoiseSVN ? Vérifier les modifications... devient pratique. Cette boîte de dialogue vous montrera chaque fichier changé de n'importe quelle façon dans votre copie de travail, aussi bien que les fichiers non versionnés que vous pouvez avoir. If you click on the Check Repository then you can also look for changes in the repository. That way you can check before an update if there's a possible conflict. You can also update selected files from the repository without updating the whole folder. By default, the Check Repository button only fetches the remote status with the checkout depth of the working copy. If you want to see all files and folders in the repository, even those you have not checked out, then you have to hold down the Shift key when you click on the Check Repository button. La boîte de dialogue utilise un code couleur pour mettre le statut en évidence . Bleu Éléments modifiés localement Pourpre Éléments ajoutés. Les éléments qui ont été ajoutés avec un historique ont un signe + dans la colonne Statut du texte et une info-bulle montre d'où l'article a été copié. Rouge foncé Éléments supprimés ou manquants. Vert Éléments modifiés localement et dans le référentiel. Les changements seront fusionnés lors de la mise à jour. Cela peut produire des conflits à la mise à jour. Guide d'utilisation quotidienne 61 Rouge clair Éléments modifiés localement et supprimés dans le référentiel, ou modifiés dans le référentiel et supprimés localement. Cela va produire des conflits à la mise à jour. Noir Éléments inchangés et non versionnés. C'est la combinaison de couleur par défaut, mais vous pouvez personnaliser ces couleurs en utilisant la boîte de dialogue de configuration. Lisez Section 4.30.1.4, « Configuration des couleurs de TortoiseSVN » pour plus d'informations. Les éléments qui ont été commutés vers un chemin de référentiel différent sont aussi indiqués en utilisant un marqueur (s). Vous pouvez avoir commuté quelque chose en travaillant sur une branche et avoir oublié de rebasculer sur le tronc. C'est votre signe d'alarme! À partir du menu contextuel de la boîte de dialogue vous pouvez afficher une comparaison des changements. Vérifiez les changements locaux que vous avez fait en utilisant Menu contextuel ? Comparer avec la Base. Vérifiez les changements du référentiel faits par les autres en utilisant Menu contextuel ? Voir les différences en mode diff unifié. Vous pouvez aussi annuler des changements dans des fichiers individuels. Si vous avez supprimé un fichier accidentellement, il apparaitra comme Manquant et vous pourrez utiliser Revenir en arrière pour le récupérer. Les fichiers non versionnés et les fichiers ignorés peuvent être envoyé dans la corbeille à partir d'ici en utilsant Menu contextuel ? Supprimer. Si vous voulez supprimer définitevement les fichiers (sans passer par la corbeille) maintenez la touche Maj pendant que vous cliquez sur Supprimer. Si vous voulez examiner un fichier en détail, vous pouvez le glisser d'ici vers une autre application comme un éditeur de texte ou une IDE. The columns are customizable. If you right click on any column header you will see a context menu allowing you to select which columns are displayed. You can also change column width by using the drag handle which appears when you move the mouse over a column boundary. These customizations are preserved, so you will see the same headings next time. If you are working on several unrelated tasks at once, you can also group files together into changelists. Read Section 4.4.2, « Listes de changements » for more information. At the bottom of the dialog you can see a summary of the range of repository revisions in use in your working copy. These are the commit revisions, not the update revisions; they represent the range of revisions where these files were last committed, not the revisions to which they have been updated. Note that the revision range shown applies only to the items displayed, not to the entire working copy. If you want to see that information for the whole working copy you must check the Show unmodified files checkbox. Astuce Si vous voulez une vue plate de votre copie de travail, c'est-à-dire qui montre tous les fichiers et des dossiers à chaque niveau de la hiérarchie des dossiers, alors la boîte de dialogue Vérifier les modifications est la façon la plus facile d'y arriver. Cochez seulement la case Afficher les fichiers non modifiés pour afficher tous les fichiers de votre copie de travail. Réparation des renommages externes Sometimes files get renamed outside of Subversion, and they show up in the file list as a missing file and an unversioned file. To avoid losing the history you need to notify Guide d'utilisation quotidienne 62 Subversion about the connection. Simply select both the old name (missing) and the new name (unversioned) and use Context Menu ? Repair Move to pair the two files as a rename. 4.7.4. Voir les différences Souvent vous voulez regarder à l'intérieur de vos fichiers, pour regarder ce que vous avez changé. Vous pouvez accomplir cela en sélectionnant un fichier qui a changé et en choisissant Voir les différences à partir du menu contextuel de TortoiseSVN. Cela démarre le visualisateur externe de différence , qui comparera alors le fichier actuel avec la copie primitive (la révision BASE), qui a été stockée après la dernière extraction ou la dernière mise à jour. Astuce Même lorsque vous ne vous trouvez pas dans une copie de travail ou quand vous avez de multiples versions du fichier ici et là, vous pouvez toujours afficher les différences : Sélectionnez les deux fichiers vous voulez comparer dans l'explorateur (en utilisant par exemple Ctrl et la souris) et sélectionnez Voir les différences à partir du menu de contextuel de TortoiseSVN. Le fichier cliqué en dernier (celui avec le focus, c'est-à-dire le rectangle pointillé) sera considéré comme le plus récent. 4.8. Listes de changements In an ideal world, you only ever work on one thing at a time, and your working copy contains only one set of logical changes. OK, back to reality. It often happens that you have to work on several unrelated tasks at once, and when you look in the commit dialog, all the changes are mixed in together. The changelist feature helps you group files together, making it easier to see what you are doing. Of course this can only work if the changes do not overlap. If two different tasks affect the same file, there is no way to separate the changes. Important La fonctionnalité de TortoiseSVN donnant la liste des changements n'est disponible qu'à partir de Windows XP, dans la mesure où elle dépend d'une fonctionnalité du shell qui n'est pas disponible dans Windows 2000. Désolé mais Win2K est vraiment vieux maintenant, donc ne vous plaignez pas. Vous pouvez voir la liste des modifications à différents endroits, mais les plus importants sont la fenêtre de livraison et la fenêtre de vérification des modifications. Commençons par la fenêtre de vérification des modifications après avoir travaillé sur différentes fonctionnalités dans beaucoup de fichiers. Lorsque vous ouvrez la fenêtre pour la première fois, tous les fichiers modifiés sont listés. Supposons maintenant que vous vouliez tout organiser et grouper ces fichiers par fonctionnalité. Select one or more files and use Context Menu ? Move to changelist to add an item to a changelist. Initially there will be no changelists, so the first time you do this you will create a new changelist. Give it name which describes what you are using it for, and click OK. The dialog will now change to show groups of items. Dès que vous avez créé une liste de modification vous pouvez y glisser/déposer des éléments depuis une autre liste de modifications, ou depuis Windows Explorer. L'avantage de le faire depuis Explorer est de permettre d'ajouter des éléments avant qu'ils le soient modifiés. Vous pourriez faire de même depuis la fenêtre de vérification des modifications, mais seulement en affichant tous les fichiers non modifiés. Guide d'utilisation quotidienne 63 Figure 4.14. Fenêtre de livraison avec les listes des modifications Dans la fenêtre de livraison vous pouvez voir ces même fichiers, regroupées par liste de modification. En dehors de donner directement une indication sur les regroupements, vous pouvez également vous servir des entêtes des groupes pour sélectionner les fichiers à livrer. Sous XP, menu contextuel apparait lorsque vous faites un clic droit sur l'entête d'un groupe, vous donnant le choix de cocher ou de décocher toutes les entrées.Sous Vista le menu contextuel n'est pas nécessaire. Cliquez sur l'entête du groupe pour tout sélectionner, puis cochez une des entrées sélectionnées pour toutes les cocher. TortoiseSVN se réserve une liste des modifications, appelée ignore-on-commit. Elle est utilisée pour marquer les fichiers versionnés que vous souhaitez rarement livrer même si vous les avez modifiés. Cette fonctionnalité estdécrite dans Section 4.4.3, « Exclude des éléments de la livraison ». Lorsque vous livrez des fichiers faisant partie d'une liste de modifications alors vous vous attendez naturellement à ce qu'ils ne fassent plus partie de cette liste. Donc par défaut, les fichiers sont retirés automatquement de la liste des modifications après avoir été livrés. Si ce comportement ne vous convient pas, utilisez la case à cocher Garder les listes de modifications en bas de la fenêtre de livraison. Guide d'utilisation quotidienne 64 Astuce Changelists are purely a local client feature. Creating and removing changelists will not affect the repository, nor anyone else's working copy. They are simply a convenient way for you to organise your files. 4.9. La boîte de dialogue de Journal de révision Pour chaque changement que vous faites et que vous livrez, vous devriez fournir un commentaire pour ce changement. De cette façon, vous pouvez plus tard découvrir quels changements vous avez fait et pourquoi et vous avez un journal détaillé pour votre processus de développement. La boîte de dialogue du Journal de révision récupère tous ces commentaires et vous les montre. L'affichage est divisé en 3 panneaux. ? Le panneau supérieur montre une liste de révisions où des changements au fichier/dossier ont été livrés. Ce résumé inclut la date et l'heure, la personne qui a livré la révision et le début du commentaire. Les lignes affichées en bleu indiquent que quelque chose a été copié vers cette ligne de développement (peut-être d'une branche). ? Le panneau du milieu montre le commentaire en entier pour la révision choisie. ? Le panneau du bas montre une liste de tous les fichiers et de tous les dossiers qui ont été changés lors de la révision sélectionnée. Mais elle fait beaucoup plus que cela - elle fournit des commandes de menu contextuel que vous pouvez utiliser pour obtenir encore plus d'informations sur l'historique du projet. Guide d'utilisation quotidienne 65 4.9.1. Appeler la boîte de dialogue du Journal de révision Figure 4.15. La boîte de dialogue de Journal de révision Il existe plusieurs endroits à partir desquels vous pouvez afficher la boîte de dialogue de Journal : ? À partir du sous-menu contextuel de TortoiseSVN ? À partir de la page de propriété ? À partir de la boîte de dialogue de progression après qu'une mise à jour a fini. Alors la boîte de dialogue de Journal ne montre que les révisions qui ont été changées depuis votre dernière mise à jour If the repository is unavailable you will see the Want to go offline? dialog, described in Section 4.9.10, « Mode hors ligne ». 4.9.2. La boîte de dialogue du Journal de révision Le panneau supérieur a une colonne Actions contenant des icones résumant ce qui a été fait dans cette révision. Il y a quatre icones différents, chacun est affiché dans sa propre colonne. Si une révision modifie un élément, l'icône modifié est affichée dans la première colonne. Si un élément a été ajouté lors d'une révision, l'icône ajouté est affichée dans la seconde colonne. Guide d'utilisation quotidienne 66 Si un élémente a été supprimé dans une révision, l'icône deleted s'affiche dans la troisième colonne. Si un élément a été remplacé, l'icône remplacé est affichée dans la quatrième colonne. 4.9.3. Obtenir des informations supplémentaires Figure 4.16. Le parreau supérieur de la boîte de dialogue du Journal de révision avec le menu contextuel De plus amples informations sont disponibles via un menu contextuel dans la partie du haut de la fenêtre de log. Des éléments de ce menu sont spécifiques aux fichiers ou aux dossiers. Comparer avec la copie de travail Comparer la révision sélectionnée avec votre copie de travail. L'outil de différenciation par défaut est TortoiseMerge qui est fourni avec TortoiseSVN. Si la boîte de dialogue de journal concerne un dossier, cela vous montrera une liste de fichiers changés et vous permettra de passer en revue les changements faits à chaque fichier individuellement. Comparez et condamner avec la BASE de travail Condamne la révision sélectionnée et le fichier dans votre base de travail et compare les résultats en utilisant un outil de différenciation. Lisez Section 4.23.2, « Condamner les différences » pour plus de détails (uniquement pour les fichiers). Show changes as unified diff Voir les changements faits dans la révision sélectionnée en tant que fichier de différences unifié (format de patch GNU). Cela montre seulement les différences avec quelques lignes de contexte. Cela est plus difficile de lire qu'une comparaison de fichiers visuelle, mais cela vous montrera tous les changements ensemble dans un format compact. Guide d'utilisation quotidienne 67 Compare avec la révision précédente Compare the selected revision with the previous revision. This works in a similar manner to comparing with your working copy. For folders this option will first show the changed files dialog allowing you to select files to compare. Compare and blame with previous revision Show the changed files dialog allowing you to select files. Blame the selected revision, and the previous revision, and compare the results using a visual diff tool. (folders only). Sauvegarder la révision dans... Sauvegarder la révision sélectionnée dans un fichier pour que vous ayez une version précédente de ce fichier. (juste valable pour les fichiers). Ouvrir / Ouvrir avec... Ouvrir le fichier sélectionné, avec l'application par défaut pour ce type de fichier, ou avec le programme de votre choix. (valable uniquement pour les fichiers). Condamner... Condamner le fichier jusqu'à la révision sélectionnée (uniquement pour les fichiers). Parcourir le référentiel Ouvrir l'explorateur de référentiel pour examiner le fichier ou dossier sélectionné dans le référentiel tel qu'il était à la révision sélectionnée. Créer une branche/un tag depuis la révision Create a branch or tag from a selected revision. This is useful e.g. if you forgot to create a tag and already committed some changes which weren't supposed to get into that release. Mettre à jour l'élément à la révision Update your working copy to the selected revision. Useful if you want to have your working copy reflect a time in the past, or if there have been further commits to the repository and you want to update your working copy one step at a time. It is best to update a whole directory in your working copy, not just one file, otherwise your working copy could be inconsistent. If you want to undo an earlier change permanently, use Revert to this revision instead. Mettre à jour à cette révision Revert to an earlier revision. If you have made several changes, and then decide that you really want to go back to how things were in revision N, this is the command you need. The changes are undone in your working copy so this operation does not affect the repository until you commit the changes. Note that this will undo all changes made after the selected revision, replacing the file/folder with the earlier version. If your working copy is in an unmodified state, after you perform this action your working copy will show as modified. If you already have local changes, this command will merge the undo changes into your working copy. What is happening internally is that Subversion performs a reverse merge of all the changes made after the selected revision, undoing the effect of those previous commits. If after performing this action you decide that you want to undo the undo and get your working copy back to its previous unmodified state, you should use TortoiseSVN ? Revert from within Windows Explorer, which will discard the local modifications made by this reverse merge action. If you simply want to see what a file or folder looked like at an earlier revision, use Update to revision or Save revision as... instead. Revert changes from this revision Undo changes from which were made in the selected revision. The changes are undone in your working copy so this operation does not affect the repository at all! Note that this will undo the Guide d'utilisation quotidienne 68 changes made in that revision only; it does not replace your working copy with the entire file at the earlier revision. This is very useful for undoing an earlier change when other unrelated changes have been made since. If your working copy is in an unmodified state, after you perform this action your working copy will show as modified. If you already have local changes, this command will merge the undo changes into your working copy. What is happening internally is that Subversion performs a reverse merge of that one revision, undoing its effect from a previous commit. Vous pouvez annuler une annulation comme décrit ci dessus dans Revenir à cette révision. Fusionner la révision avec... Merge the selected revision(s) into a different working copy. A folder selection dialog allows you to choose the working copy to merge into, but after that there is no confirmation dialog, nor any opportunity to try a test merge. It is a good idea to merge into an unmodified working copy so that you can revert the changes if it doesn't work out! This is a useful feature if you want to merge selected revisions from one branch to another. Extraire... Fait une extraction propre de la révision sélectionnée. Cette fonctionnalité déclenche l'affichage d'une fenêtre permettant de confirmer l'URL, le numéro de la révision, et de sélectionner l'emplacement de l'extraction. Exporter... Exporter le fichier/répertoire sélectionné à la révision sélectionnée. Une fenêtre vous demande alors de confirmer l'URL, la révision, et de sélectionner le répertoire où faire exportation. Modifier l'auteur/le message informatif Éditer le commentaire ou l'auteur attaché à une précédente livraison. Lisez Section 4.9.7, « Changer le commentaire et l'auteur » pour découvrir comment cela fonctionne. Montrer les propriétés de la révision Voir ou éditer les propriétés d'une révision, outre le message d'information et l'auteur. Voir Section 4.9.7, « Changer le commentaire et l'auteur ». Ajouter au presse papier Copier les commentaires des révisions sélectionnées dans le presse papier. Pour chaque révision, la révision, l'auteur, la date, le commentaire et la liste des éléments modifiés seront alors copiés. Rechercher les messages de informatifs... Chercher les commentaires correspondants au texte que vous entrez. Cela recherche dans les commentaires que vous avez saisis et aussi les résumés d'action créés par Subversion (montré dans le panneau du bas). La recherche n'est pas sensible à la casse. Figure 4.17. Menu contextuel du panneau supérieur avec 2 révisions sélectionnées Guide d'utilisation quotidienne 69 Si vous sélectionnez deux révisions en même temps (en utilisant le modificateur habituel Ctrl), le menu contextuel change et vous propose moins d'options : Comparer des révision Comparer les deux révisions choisies en utilisant un outil de différenciation visuel. L'outil de différenciation par défaut est TortoiseMerge qui est fourni avec TortoiseSVN. Si vous choisissez cette option pour un dossier, une nouvelle boîte de dialogue surgit en listant les fichiers changés et vous offre des options de comparaison avancées. Lisez plus sur la comparaison de révision dans Section 4.10.3, « Comparer des répertoires ». Condamner les révisions Condamne les deux révisions et compare les résultats en utilisant un outil de différenciation. Lisez Section 4.23.2, « Condamner les différences » pour plus de détails. Show differences as unified diff Voir les différences entre les deux révisions sélectionnées en tant que fichier de différences unifié. Cela fonctionne pour les fichiers et les dossiers. Ajouter au presse papier Copier les commentaires dans le presse-papiers comme décrit ci-dessus. Rechercher les messages de informatifs... Chercher les commentaires comme décrit ci-dessus. If you select two or more revisions (using the usual Ctrl or Shift modifiers), the context menu will include an entry to Revert all changes which were made in the selected revisions. This is the easiest way to rollback a group of revisions in one go. Vous pouvez également choisir de fusionner les révisions sélectionnées dans une autre copie de travail, comme décrit ci dessus. Si toutes les révisions sélectionnées ont le même auteurs, vous pouvez éditer leur champ auteur en une seule opération. Figure 4.18. Le panneau inférieur de la boîte de dialogue du Journal avec le menu contextuel Le panneau du bas de la boîte de dialogue Journal a aussi un menu contextuel qui vous permet de Voir les modifications Show changes made in the selected revision for the selected file. This context menu is only available for files shown as modified. Guide d'utilisation quotidienne 70 Bannir les modifications Blame the selected revision and the previous revision for the selected file, and compare the blame reports using a visual diff tool. Read Section 4.23.2, « Condamner les différences » for more detail. Show as unified diff Show file changes in unified diff format. This context menu is only available for files shown as modified. Ouvrir / Ouvrir avec... Ouvrir le fichier sélectionné, avec le visualisateur par défaut pour ce type de fichier, ou avec le programme de votre choix. Condamner... Ouvre la fenêtre de bannissement, vous permettant de bannir la révision sélectionnée. Revert changes from this revision Annuler les changements effectués au fichier sélectionné dans cette révision. Voir les propriétés Voir les propriétés Subversion pour l'élément sélectionné. Voir le journal Afficher le journal de révision pour le seul fichier choisi. Récupérer les messages de fusion Montre les messages d'information pour le seul fichier sélectionné, y compris les modifications fusionnées. Plus de détail dans Section 4.9.6, « Fonctionnalités de Suivi des Fusions ». Sauvegarder la révision dans... Sauvegarder la révision sélectionnée dans un fichier pour que vous ayez une version précédente de ce fichier. Astuce Vous avez peut être remarqué que nous faisons parfois référence à des modifications et parfois à des différences. Quelles sont les différences ? Subversion utilise des numéros de révision pour deux raisons. Une révision représente l'état d'un référentiel à un moment donné, elle peut aussi matérialiser la liste des modifications ayant mené à cette révision, i.e. « Fait dans r1234 » veux dire que l'implémentation de la fonctionalité X a été faite via les modifications livrées dans la r1234. Pour connaitre le sens d'une révision, nous utilisons deux termes différents. Si vous sélectionnez deux révisions N et M, le menu contextuel vous permettra de voir les différences entre ces deux révisions. Dans Subversion, cette opération correspond à la commande diff -r M:N. Si vous sélectionnez une seule révision N, le menu contextuel vous proposera d'afficher les modifications faites dans cette révision. Dans le jargon de Subversion cela se traduit par diff -r N-1:N ou diff -c N. The bottom pane shows the files changed in all selected revisions, so the context menu always offers to show changes. 4.9.4. Obtenir plus de commentaires Le boîte de dialogue du Journal ne montre pas toujours tous les changements faits pour certaines raisons : ? For a large repository there may be hundreds or even thousands of changes and fetching them all could take a long time. Normally you are only interested in the more recent changes. By default, the number Guide d'utilisation quotidienne 71 of log messages fetched is limited to 100, but you can change this value in TortoiseSVN ? Settings (Section 4.30.1.2, « Réglages des boîtes de dialogues TortoiseSVN 1 »), ? Quand la case Arrêt à la copie/renommage est cochée, Voir le journal s'arrêtera au moment où le fichier ou le dossier sélectionné ont été copiés d'ailleurs du référentiel. Cela peut être utile en regardant les branches (ou les étiquettes) puisque cela s'arrête à la racine de cette branche et donne une indication rapide des changements faits dans cette branche seulement. Normalement vous voudrez laisser cette option décochée.TortoiseSVN se souvient de l'état de la case à cocher, donc il respectera votre préférence. Quand la boîte de dialogue Voir le journal est appelée depuis la boîte de dialogue Fusionner, la case est toujours cochée par défaut. C'est parce que la fusion concerne le plus souvent des changements sur des branches et revenir au-delà de la racine de la branche n'a aucun sens dans ce cas. Notez que Subversion met actuellement en oeuvre le renommage comme une paire copie/suppression, donc renommer un fichier ou un dossier causera aussi l'arrêt de l'affichage du journal si cette option est cochée. Si vous voulez voir plus de commentaires, cliquez sur le bouton 100 suivants pour récupérer les 100 commentaires suivants. Vous pouvez répéter cela autant de fois que nécessaire. À côté de ce bouton il y a un bouton multi-fonctions qui se souvient de la dernière option pour laquelle vous l'avez utilisé. Cliquez sur la flèche pour voir les autres options offertes. Utilisez Afficher la plage ... si vous voulez voir une plage spécifique de révisions. Une boîte de dialogue vous demandera alors d'entrer les révisions de début et de fin. Utilisez Afficher tout si vous voulez voir tous les commentaires depuis HEAD jusqu'à la révision 1. 4.9.5. Révision de la Copie de Travail Courante Because the log dialog shows you the log from HEAD, not from the current working copy revision, it often happens that there are log messages shown for content which has not yet been updated in your working copy. To help make this clearer, the commit message which corresponds to the revision you have in your working copy is shown in bold. By default this only works for files. This is because the update revision for a folder may not correspond to the update revision of its content, and the only way to find the effective update revision for the folder is to crawl the working copy. This can be a slow operation for large working copies so if you want to enable this feature you must create a DWORD registry key with value 1 at HKCU\Software\TortoiseSVN \RecursiveLogRev. 4.9.6. Fonctionnalités de Suivi des Fusions Subversion 1.5 and later keeps a record of merges using properties. This allows us to get a more detailed history of merged changes. For example, if you develop a new feature on a branch and then merge that branch back to trunk, the feature development will show up on the trunk log as a single commit for the merge, even though there may have been 1000 commits during branch development. Guide d'utilisation quotidienne 72 Figure 4.19. The Log Dialog Showing Merge Tracking Revisions Si vous voulez voir quelles révisions ont été fusionnées dans un commit donné, utilisez la case à cocher Inclure les révisions fuisionnées. Les messages de log seront affichés de nouveau, mais ils inclueront à présent les messages des révisions fusionnées. Les révisions fusionnées sont affichées en gris car elles représentent des modifications effectuées dans un autre branche de l'arborescence. Of course, merging is never simple! During feature development on the branch there will probably be occasional merges back from trunk to keep the branch in sync with the main line code. So the merge history of the branch will also include another layer of merge history. These different layers are shown in the log dialog using indentation levels. 4.9.7. Changer le commentaire et l'auteur Revision properties are completely different from the Subversion properties of each item. Revprops are descriptive items which are associated with one specific revision number in the repository, such as log message, commit date and committer name (author). Parfois vous pourriez vouloir changer un commentaire que vous avez saisi, peut-être parce qu'il y a une faute d'orthographe dedans ou parce que vous voulez améliorer le message ou le changer pour d'autres raisons. Ou vous voulez changer l'auteur de la livraison parce que vous avez oublié de mettre en place l'authentification ou... Subversion lets you change revision properties any time you want. But since such changes can't be undone (those changes are not versioned) this feature is disabled by default. To make this work, you must set up a pre-revprop-change hook. Please refer to the chapter on Hook Scripts [http://svnbook.red- Guide d'utilisation quotidienne 73 bean.com/en/1.5/svn.reposadmin.create.html#svn.reposadmin.create.hooks] in the Subversion Book for details about how to do that. Read Section 3.3, « Scripts de hook côté serveur » to find some further notes on implementing hooks on a Windows machine. Once you've set up your server with the required hooks, you can change the author and log message (or any other revprop) of any revision, using the context menu from the top pane of the Log dialog. You can also edit a log message using the context menu for the middle pane. Avertissement Parce que les propriétés de révision de Subversion ne sont pas versionnées, modifier une telle propriété (par exemple, la propriété du commentaire de livraison svn:log) écrasera la valeur précédente de cette propriété pour toujours. 4.9.8. Filtrer les commentaires Si vous voulez limiter les commentaires pour afficher seulement ceux qui vous intéressent, plutôt que de défiler une liste de centaines de commentaires, vous pouvez utiliser les commandes de filtre en haut de la boîte de dialogue de Journal. Les dates de début et de fin vous permettent de limiter les résultats à une plage de dates connue. La boîte de recherche vous permet de montrer seulement les messages qui contiennent une expression particulière. Click on the search icon to select which information you want to search in, and to choose regex mode. Normally you will only need a simple text search, but if you need to more flexible search terms, you can use regular expressions. If you hover the mouse over the box, a tooltip will give hints on how to use the regex functions. You can also find online documentation and a tutorial at http://www.regular- expressions.info/. The filter works by checking whether your filter string matches the log entries, and then only those entries which match the filter string are shown. To make the filter show all log entries that do not match the filter string, start the string with an exclamation mark ('!'). For example, a filter string !username will only show those entries which were not committed by username. Notez que ces filtres agissent sur les messages déjà récupérés. Ils ne provoquent pas de téléchargement de messages du référentiel. You can also filter the path names in the bottom pane using the Hide unrelated changed paths checkbox. Related paths are those which contain the path used to display the log. If you fetch the log for a folder, that means anything in that folder or below it. For a file it means just that one file. The checkbox is tristate: you can show all paths, grey out the unrelated ones, or hide the unrelated paths completely. Parfois, vos habitudes de travail nécessiteront que les messages de log aient un format particulier, ce qui signifie que le texte résumant les modifications ne sera pas visible dans le panneau supérieur. La propriététsvn:logsummary peut être utilisée pour afficher dans le panneau supérieur une partie du message de log. Lisez Section 4.17.2, « Propriétés du projet TortoiseSVN » pour savoir comment utiliser cette propriété. Pas de Formattage des Commentaires depuis l'Explorateur de Référentiel Because the formatting depends upon accessing subversion properties, you will only see the results when using a checked out working copy. Fetching properties remotely is a slow operation, so you will not see this feature in action from the repo browser. 4.9.9. Informations statistiques Guide d'utilisation quotidienne 74 Le bouton Statistiques fait apparaître une boîte montrant des informations intéressantes sur les révisions affichées dans la boîte de dialogue de Journal. Elle montre combien d'auteurs ont travaillé, combien de livraisons ils ont fait, la progression par semaine et beaucoup plus. Maintenant vous pouvez voir d'un coup d'oeil qui a travaillé le plus dur et qui se relâche ;-) 4.9.9.1. Page des statistiques Cette page vous donne tous les nombres auxquels vous pouvez penser, en particulier la période et le nombre de révisions couvertes et quelques valeurs min/max/moyennes. 4.9.9.2. Page de livraisons par auteur Figure 4.20. Histogramme de livraisons par auteur Ce graphique vous montre quels auteurs ont été actifs sur le projet par un simple histogramme, un histogramme empilé ou un camembert. Guide d'utilisation quotidienne 75 Figure 4.21. Camembert de livraisons par auteur Where there are a few major authors and many minor contributors, the number of tiny segments can make the graph more difficult to read. The slider at the bottom allows you to set a threshold (as a percentage of total commits) below which any activity is grouped into an Others category. Guide d'utilisation quotidienne 76 4.9.9.3. Page de livraisons par date Figure 4.22. Graphique de livraisons par date Cette page vous donne une représentation graphique de l'activité du projet en termes de nombre de livraisons et d'auteurs. Cela donne une certaine idée quand un projet est travaillé et qui travaillait à quel moment. Quand il y a plusieurs auteurs, vous obtiendrez beaucoup de lignes sur le graphique. Il y a deux vues disponibles ici : normale, où l'activité de chaque auteur est relative à la ligne de base et empilée, où l'activité de chaque auteur est relative à la ligne d'en dessous. La dernière option évite les lignes qui se traversent, ce qui peut rendre le graphique plus facile à lire, mais moins facile pour voir la production d'un auteur. By default the analysis is case-sensitive, so users PeterEgan and PeteRegan are treated as different authors. However, in many cases user names are not case-sensitive, and are sometimes entered inconsistently, so you may want DavidMorgan and davidmorgan to be treated as the same person. Use the Authors case insensitive checkbox to control how this is handled. Notez que les statistiques couvre la même période que la boîte de dialogue de Journal. Si elle ne montre qu'une révision alors les statistiques ne vous diront pas grand chose. Guide d'utilisation quotidienne 77 4.9.10. Mode hors ligne Figure 4.23. Go Offline Dialog If the server is not reachable, and you have log caching enabled you can use the log dialog and revision graph in offline mode. This uses data from the cache, which allows you to continue working although the information may not be up-to-date or even complete. Here you have three options: Offline for now Complete the current operation in offline mode, but retry the repository next time log data is requested. Permanently offline Remain in offline mode until a repository check is specifically requested. See Section 4.9.11, « Refraichissement de l'affichage ». Cancel If you don't want to continue the operation with possibly stale data, just cancel. The Make this the default checkbox prevents this dialog from re-appearing and always picks the option you choose next. You can still change (or remove) the default after doing this from TortoiseSVN ? Settings. 4.9.11. Refraichissement de l'affichage If you want to check the server again for newer log messages, you can simply refresh the view using F5. If you are using the log cache (enabled by default), this will check the repository for newer messages and fetch only the new ones. If the log cache was in offline mode, this will also attempt to go back online. If you are using the log cache and you think the message content or author may have changed, you can use Shift-F5 or Ctrl-F5 to re-fetch the displayed messages from the server and update the log cache. Note that this only affects messages currently shown and does not invalidate the entire cache for that repository. 4.10. Voir les différences One of the commonest requirements in project development is to see what has changed. You might want to look at the differences between two revisions of the same file, or the differences between two separate files. TortoiseSVN provides a built-in tool named TortoiseMerge for viewing differences of text files. Guide d'utilisation quotidienne 78 For viewing differences of image files, TortoiseSVN also has a tool named TortoiseIDiff. Of course, you can use your own favourite diff program if you like. 4.10.1. Différences de fichier Changements locaux Si vous voulez voir quels changements vous avez fait dans votre copie de travail, utilisez juste le menu contextuel de l'explorateur et choisissez TortoiseSVN ? Voir les différences. Comparaison avec une autre branche/étiquette Si vous voulez voir ce qui a changé sur le tronc (si vous travaillez sur une branche) ou sur une branche spécifique (si vous travaillez sur le tronc), vous pouvez utiliser le menu contextuel de l'explorateur. Maintenez juste la touche Maj tandis que vous faites un clic droit sur le fichier. Sélectionnez alors TortoiseSVN ? Diff avec l'URL. Dans la boîte de dialogue suivante, spécifiez l'URL dans le référentiel avec laquelle vous voulez comparer votre fichier local. Vous pouvez aussi utiliser l'explorateur de référentiel et sélectionner deux arbres à comparer, deux étiquettes peut-être, ou une branche/étiquette et le tronc. Le menu contextuel vous permet là de les comparer en utilisant Comparer les révisions. Lisez en plus dans Section 4.10.3, « Comparer des répertoires ». Comparaison avec une précédente révision Si vous voulez voir les différences entre une révision particulière et votre copie de travail, utilisez la boîte de dialogue de Journal de révision, sélectionnez la révision qui vous intéresse, puis choisissez Comparaison avec la copie de travail dans le menu contextuel. If you want to see the difference between the last committed revision and your working copy, assuming that the working copy hasn't been modified, just right click on the file. Then select TortoiseSVN ? Diff with previous version. This will perform a diff between the revision before the last-commit-date (as recorded in your working copy) and the working BASE. This shows you the last change made to that file to bring it to the state you now see in your working copy. It will not show changes newer than your working copy. Comparaison entre deux révisions précédentes Si vous voulez voir les différence entre deux révisions déjà livrées, utilisez la boîte de dialogue de Journal de révision et sélectionnez les deux révisions que vous voulez comparer (en utilisant le modificateur habituel Ctrl). Puis choisissez Comparer les révisions à partir du menu contextuel. Si vous avez fait ceci depuis le journal sur un répertoire, une boîte de dialogue Comparer les révisions apparaît, affichant la liste des fichiers dans ce dossier. Lisez-en plus dans Section 4.10.3, « Comparer des répertoires ». Tous les changements faits dans une livraison Si vous voulez voir les changements faits à tous les fichiers dans une révision particulière en une vue, vous pouvez utiliser la sortie en mode Diff-Unifié (format de patch GNU). Cela montre seulement les différences avec quelques lignes de contexte. Il est plus difficile à lire qu'une comparaison de fichier visuelle, mais montrera tous les changements ensemble. À partir de la boîte de dialogue du Journal de Révision sélectionnez la révision qui vous intéresse, puis choisissez Voir les différences en mode diff unifié à partir du menu contextuel. Comparaison entre fichiers Si vous voulez voir les différences entre deux fichiers différents, vous pouvez le faire directement dans l'explorateur en sélectionnant les deux fichiers (en utilisant le modificateur habituel Ctrl). Alors à partir du menu contextuel de l'explorateur, sélectionnez TortoiseSVN ? Voir les différences. Différence entre fichiers/répertoires de la CdT et une URL If you want to see the differences between a file in your working copy, and a file in any Subversion repository, you can do that directly in explorer by selecting the file then holding down the Shift key Guide d'utilisation quotidienne 79 whilst right clicking to obtain the context menu. Select TortoiseSVN ? Diff with URL. You can do the same thing for a working copy folder. TortoiseMerge shows these differences in the same way as it shows a patch file - a list of changed files which you can view one at a time. Comparaison avec informations de condamnation Si vous voulez ne pas voir que les différences mais aussi l'auteur, la révision et la date des modifications effectuées, vous pouvez combiner les rapports de différenciation et de condamnation au sein de la boîte de dialogue du journal de révision. Lisez Section 4.23.2, « Condamner les différences » pour plus de détails. Comparaison entre répertoires The built-in tools supplied with TortoiseSVN do not support viewing differences between directory hierarchies. But if you have an external tool which does support that feature, you can use that instead. In Section 4.10.5, « Outils de différenciation/fusion externes » we tell you about some tools which we have used. If you have configured a third party diff tool, you can use Shift when selecting the Diff command to use the alternate tool. Read Section 4.30.5, « Réglages des programmes externes » to find out about configuring other diff tools. 4.10.2. Options de fins de ligne et d'espacement Sometimes in the life of a project you might change the line endings from CRLF to LF, or you may change the indentation of a section. Unfortunately this will mark a large number of lines as changed, even though there is no change to the meaning of the code. The options here will help to manage these changes when it comes to comparing and applying differences. You will see these settings in the Merge and Blame dialogs, as well as in the settings for TortoiseMerge. Ignorer les caractères de fins de ligne exclue les modifications seulement dues aux style des caractères de fin de ligne. Compare les caractères d'espacement inclue les modifications d'indentation et d'espaces à la liste des lignes ajoutées/supprimées. Ignore les modifications des caractères d'espacement exclue les modifications étant seulement dues au style ou à la quantité de caractères d'espacement, i.e. changement dans l'indentation ou remplacement des tabulations par des espaces. Ajouter des espaces là où il n'y en avait pas, ou tous les retirer est toujours affiché comme étant une modification. Ignorer tous les caractères d'espacement exclue toutes les modifications dues aux caractères d'espacement. Naturellement, chaque ligne modifiée est toujours incluse dans le diff. 4.10.3. Comparer des répertoires Guide d'utilisation quotidienne 80 Figure 4.24. La boîte de dialogue Comparer les révisions Quand vous sélectionnez deux arborescences dans l'explorateur de référentiel ou quand vous sélectionnez deux révisions d'un répertoire dans la boîte de dialogue du journal, vous pouvez Menu contextuel ? Compare les révisions. Cette boîte de dialogue affiche une liste des fichiers modifiés et vous permet de les comparer ou de les condamner individuellement en utilisant le menu contextuel. You can export a change tree, which is useful if you need to send someone else your project tree structure, but containing only the files which have changed. This operation works on the selected files only, so you need to select the files of interest - usually that means all of them - and then Context menu ? Export selection to.... You will be prompted for a location to save the change tree. You can also export the list of changed files to a text file using Context menu ? Save list of selected files to.... If you want to export the list of files and the actions (modified, added, deleted) as well, you can do that using Context menu ? Copy selection to clipboard. Le bouton en haut vous permet de modifier le sens de la comparaison. Vous pouvez afficher les changements nécessaires pour arriver de A vers B, ou si vous préférez, de B vers A. The buttons with the revision numbers on can be used to change to a different revision range. When you change the range, the list of items which differ between the two revisions will be updated automatically. If the list of filenames is very long, you can use the search box to reduce the list to filenames containing specific text. Note that a simple text search is used, so if you want to restrict the list to C source files you should enter .c rather than *.c. Guide d'utilisation quotidienne 81 4.10.4. Comparaison des images en utilisant TortoiseIDiff Il y a beaucoup d'outils disponibles pour comparer des fichiers texte, incluant notre propre TortoireMerge, mais souvent, nous nous retrouvions à vouloir voir comment un fichier image a été modifié aussi. C'est pourquoi nous avons créé TortoiseIDiff. Figure 4.25. Le visualiseur de différences d'images TortoiseSVN ? Diff for any of the common image file formats will start TortoiseIDiff to show image differences. By default the images are displayed side-by-side but you can use the View menu or toolbar to switch to a top-bottom view instead, or if you prefer, you can overlay the images and pretend you are using a lightbox. Naturally you can also zoom in and out and pan around the image. You can also pan the image simply by left-dragging it. If you select the Link images together option, then the pan controls (scrollbars, mousewheel) on both images are linked. An image info box shows details about the image file, such as the size in pixels, resolution and colour depth. If this box gets in the way, use View ? Image Info to hide it. You can get the same information in a tooltip if you hover the mouse over the image title bar. When the images are overlaid, the relative intensity of the images (alpha blend) is controlled by a slider control at the left side. You can click anywhere in the slider to set the blend directly, or you can drag the slider to change the blend interactively. Ctrl+Shift-Wheel to change the blend. The button above the slider toggles between 0% and 100% blends, and if you double click the button, the blend toggles automatically every second until you click the button again. This can be useful when looking for multiple small changes. Sometimes you want to see a difference rather than a blend. You might have the image files for two revisions of a printed circuit board and want to see which tracks have changed. If you disable alpha blend Guide d'utilisation quotidienne 82 mode, the difference will be shown as an XOR of the pixel colour values. Unchanged areas will be plain white and changes will be coloured. 4.10.5. Outils de différenciation/fusion externes Si les outils que nous fournissons ne font pas ce dont vous avez besoin, essayez un des nombreux programmes open-source ou commerciaux disponibles. Chacun a son propre favori et cette liste n'est en aucun cas exhaustive, mais en voici quelques-uns à considérer : WinMerge WinMerge [http://winmerge.sourceforge.net/] est un grand outil de comparaison open-source qui peut aussi manipuler les répertoires. Perforce Merge Perforce est un RCS commercial, mais vous pouvez télécharger l'outil de différenciation/ fusion gratuitement . Obtenez plus d'informations sur Perforce [http://www.perforce.com/perforce/ products/merge.html]. KDiff3 KDiff3 est un outil de comparaison gratuit qui peut aussi manipuler des répertoires. Vous pouvez le télécharger ici [http://kdiff3.sf.net/]. ExamDiff ExamDiff Standard est un logiciel gratuit. Il peut manipuler les fichiers, mais pas les répertoires. ExamDiff Pro est shareware et ajoute un certain nombre de goodies incluant la comparaison de répertoires et des possibilités d'édition. Dans les deux, les versions 3.2 et supérieures peuvent gérer l'unicode. Vous pouvez les télécharger chez PrestoSoft [http://www.prestosoft.com/]. Beyond Compare Semblable à ExamDiff Pro, c'est un outil de différenciation shareware excellent qui peut manipuler les comparaisons de répertoires et l'unicode. Téléchargez-le chez Scooter Software [http:// www.scootersoftware.com/]. Araxis Merge Araxis Merge is a useful commercial tool for diff and merging both files and folders. It does three- way comparison in merges and has synchronization links to use if you've changed the order of functions. Download it from Araxis [http://www.araxis.com/merge/index.html]. SciTE Cet éditeur de texte inclut la coloration syntaxique pour les diffs unifié, les rendant beaucoup plus faciles à lire. Téléchargez-le chez Scintilla [http://www.scintilla.org/SciTEDownload.html]. Notepad2 Notepad2 est conçu comme un remplaçant pour le programme standard de Bloc-notes Windows et est basé sur le contrôle d'édition open-source de Scintilla. En plus d'être bon pour voir les diffs unifiés, il est beaucoup mieux que le bloc-notes Windows pour la plupart des travaux. Téléchargez- le gratuitement ici [http://www.flos-freeware.ch/notepad2.html]. Lisez Section 4.30.5, « Réglages des programmes externes » pour des informations sur la façon de configurer TortoiseSVN pour utiliser ces outils. 4.11. Ajouter de nouveaux fichiers et répertoires Guide d'utilisation quotidienne 83 Figure 4.26. Menu contextuel de l'explorateur pour les fichiers non versionnés Si vous avez créé de nouveaux fichiers et/ou de nouveaux répertoires pendant votre processus de développement alors vous devez aussi les ajouter au contrôle de source. Sélectionnez les fichiers et/ou les répertoires et utilisez TortoiseSVN ? Ajouter. Après que vous ayez ajouté les fichiers/répertoires au contrôle de source, le fichier apparaît avec une icône de recouvrement ajouté qui veut dire que vous devez d'abord livrer votre copie de travail pour rendre ces fichiers/répertoires disponibles aux autres développeurs. L'ajout d'un fichier/répertoire n'affecte pas le référentiel ! Plusieurs ajouts You can also use the Add command on already versioned folders. In that case, the add dialog will show you all unversioned files inside that versioned folder. This helps if you have many new files and need to add them all at once. Pour ajouter des fichiers de l'extérieur de votre copie de travail, vous pouvez utiliser le glisser-déplacer : 1. sélectionnez les fichiers que vous voulez ajouter 2. glissez-déposer avec le bouton droit ceux-ci au nouvel emplacement à l'intérieur de la copie de travail 3. relâchez le bouton droit de la souris 4. sélectionnez Menu contextuel ? SVN Ajouter les fichiers à cette CdT. Les fichiers seront alors copiés dans la copie de travail et ajoutés au contrôle de version. You can also add files within a working copy simply by left-dragging and dropping them onto the commit dialog. Si vous ajoutez un élément par erreur, vous pouvez annuler l'opération avant de livrer en utilisant la commande TortoiseSVN ? Annuler l'ajout.... 4.12. Copier/Déplacer/Renommer des Fichiers et des Dossiers It often happens that you already have the files you need in another project in your repository, and you simply want to copy them across. You could simply copy the files and add them as described above, but that would not give you any history. And if you subsequently fix a bug in the original files, you can only merge the fix automatically if the new copy is related to the original in Subversion. The easiest way to copy files and folders from within a working copy is to use the right-drag menu. When you right-drag a file or folder from one working copy to another, or even within the same folder, a context menu appears when you release the mouse. Guide d'utilisation quotidienne 84 Figure 4.27. Menu pour un répertoire sous contrôle de version lors d'un glisser- déplacer avec le bouton droit Now you can copy existing versioned content to a new location, possibly renaming it at the same time. You can also copy or move versioned files within a working copy, or between two working copies, using the familiar cut-and-paste method. Use the standard Windows Copy or Cut to copy one or more versioned items to the clipboard. If the clipboard contains such versioned items, you can then use TortoiseSVN ? Paste (note: not the standard Windows Paste) to copy or move those items to the new working copy location. You can copy files and folders from your working copy to another location in the repository using TortoiseSVN ? Branch/Tag. Refer to Section 4.19.1, « Créer une branche ou une étiquette » to find out more. You can locate an older version of a file or folder in the log dialog and copy it to a new location in the repository directly from the log dialog using Context menu ? Create branch/tag from revision. Refer to Section 4.9.3, « Obtenir des informations supplémentaires » to find out more. You can also use the repository browser to locate content you want, and copy it into your working copy directly from the repository, or copy between two locations within the repository. Refer to Section 4.24, « l'explorateur de référentiel » to find out more. Impossible de copier entre référentiels Whilst you can copy and files and folders within a repository, you cannot copy or move from one repository to another while preserving history using TortoiseSVN. Not even if the repositories live on the same server. All you can do is copy the content in its current state and add it as new content to the second repository. If you are uncertain whether two URLs on the same server refer to the same or different repositories, use the repo browser to open one URL and find out where the repository root is. If you can see both locations in one repo browser window then they are in the same repository. 4.13. Ignorer des fichiers et des répertoires Guide d'utilisation quotidienne 85 Figure 4.28. Menu contextuel de l'explorateur pour les fichiers non versionnés In most projects you will have files and folders that should not be subject to version control. These might include files created by the compiler, *.obj, *.lst, maybe an output folder used to store the executable. Whenever you commit changes, TortoiseSVN shows your unversioned files, which fills up the file list in the commit dialog. Of course you can turn off this display, but then you might forget to add a new source file. La meilleure façon d'éviter ces problèmes est d'ajouter les fichiers dérivés à la liste des ignorés du projet. De cette manière, ils ne s'afficheront jamais dans la boîte de dialogue Livrer, mais les vrais fichiers source non versionnés seront toujours marqués. Si vous faites un clic droit sur un seul fichier non versionné et sélectionnez la commande TortoiseSVN ? Ajouter à la liste des ignorés à partir du menu contextuel, un sous-menu apparaît vous permettant de ne choisir que ce fichier, ou tous les fichiers avec la même extension. Si vous sélectionnez plusieurs fichiers, il n'y a pas de sous-menu et vous pouvez seulement ajouter ces fichiers/dossiers spécifiques. If you want to remove one or more items from the ignore list, right click on those items and select TortoiseSVN ? Remove from Ignore List You can also access a folder's svn:ignore property directly. That allows you to specify more general patterns using filename globbing, described in the section below. Read Section 4.17, « Configuration des projets » for more information on setting properties directly. Please be aware that each ignore pattern has to be placed on a separate line. Separating them by spaces does not work. La liste des ignorés globale Une autre façon d'ignorer des fichiers est de les ajouter à la liste des ignorés globale. La grande différence ici, c'est que la liste des ignorés globale est une propriété client. Elle s'applique à tous les projets Subversion, mais sur le PC client uniquement. En général, c'est mieux d'utiliser la propriété svn:ignore où c'est possible, parce qu'elle peut être appliquée à des secteurs spécifiques du projet et elle fonctionne pour tous ceux qui extraient le projet. Lisez Section 4.30.1, « Configuration générale » pour plus d'informations. Ignorer les éléments versionnés Les fichiers et les répertoires versionnés ne peuvent jamais être ignorés - c'est une fonctionnalité de Subversion. Si vous avez versionné un fichier par erreur, lisez Section B.8, « Ignorer les fichiers déjà versionnés » pour savoir comment le « déversionner ». 4.13.1. L'utilisation des pattern matching dans la liste des fichier à ignorer Guide d'utilisation quotidienne 86 Les modèles d'exclusion de Subversion se servent de l'expansion des jokers (globbing) dans les noms de fichier, une technique à l'origine utilisée sous Unix pour spécifier des fichiers utilisant des méta-caractères comme caractères de remplacement. Les caractères suivants ont une signification spéciale : * Correspond à n'importe quelle chaîne de caractères, y compris la chaîne vide (aucun caractère). ? Correspond à n'importe quel caractère. [...] Correspond à n'importe lequel des caractères inclus dans les crochets. Dans les crochets, une paire de caractères séparés par « - » correspond à n'importe quel caractère lexicalement entre les deux. Par exemple [AGm-p] correspond à A, G, m, n, o ou p. La correspondance des modèles est sensible à la casse, ce qui peut causer des problèmes sous Windows. Vous pouvez forcer la non sensibilité à la casse en dur en appareillant des caractères, par exemple pour ignorer *.tmp indépendamment de la casse, vous pourriez utiliser un modèle comme *.[Tt][Mm] [Pp]. Si vous voulez une définition officielle pour l'expansion de jokers (globbing), vous pouvez la trouver dans les spécifications IEEE pour le langage de commande d'interpréteur de commandes Pattern Matching Notation [http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_13]. Pas de Chemins dans la Liste des Fichiers Ignorés You should not include path information in your pattern. The pattern matching is intended to be used against plain file names and folder names. If you want to ignore all CVS folders, just add CVS to the ignore list. There is no need to specify CVS */CVS as you did in earlier versions. If you want to ignore all tmp folders when they exist within a prog folder but not within a doc folder you should use the svn:ignore property instead. There is no reliable way to achieve this using global ignore patterns. 4.14. Supprimer, déplacer et renommer À la différence de CVS, Subversion permet de renommer et de déplacer des fichiers et des dossiers. Il y a donc des entrées de menu pour supprimer et renommer dans le sous-menu de TortoiseSVN. Guide d'utilisation quotidienne 87 Figure 4.29. Menu contextuel de l'explorateur pour les fichiers non versionnés 4.14.1. Supprimer des fichiers et des dossiers Use TortoiseSVN ? Delete to remove files or folders from subversion. When you TortoiseSVN ? Delete a file, it is removed from your working copy immediately as well as being marked for deletion in the repository on next commit. The file's parent folder shows a « deleted » icon overlay. Up until you commit the change, you can get the file back using TortoiseSVN ? Revert on the parent folder. When you TortoiseSVN ? Delete a folder, it remains in your working copy, but the overlay changes to indicate that it is marked for deletion. Up until you commit the change, you can get the folder back using TortoiseSVN ? Revert on the folder itself. This difference in behaviour between files and folders is a part of Subversion, not TortoiseSVN. If you want to delete an item from the repository, but keep it locally as an unversioned file/folder, use Extended Context Menu ? Delete (keep local). You have to hold the Shift key while right clicking on the item in the explorer list pane (right pane) in order to see this in the extended context menu. Guide d'utilisation quotidienne 88 Si un fichier est supprimé via l'explorateur au lieu d'utiliser le menu contextuel TortoiseSVN, la boîte de dialogue Livrer affiche ces fichiers et vous laisse aussi les supprimer du contrôle de version avant la livraison. Cependant, si vous mettez à jour votre copie de travail, Subversion découvrira le fichier manquant et le remplacera par la dernière version du référentiel. Si vous devez supprimer un fichier sous contrôle de version, utilisez toujours TortoiseSVN ? Supprimer pour que Subversion n'ait pas à deviner ce que vous voulez vraiment faire. Si un dossier est supprimé via l'explorateur au lieu d'utiliser le menu contextuel TortoiseSVN, votre copie de travail sera cassée et vous serez incapables de livrer. Si vous mettez à jour votre copie de travail, Subversion remplacera le dossier manquant avec la dernière version du référentiel et vous pourrez alors le supprimer correctement en utilisant TortoiseSVN ? Supprimer. Récupérer un fichier ou un répertoire supprimé Si vous avez supprimé un fichier ou un dossier et avez déjà livré cette opération de suppression au référentiel, alors un normal TortoiseSVN ? Revenir en arrière normal ne peut plus le ramener. Mais le fichier ou le dossier n'est pas perdu pour autant. Si vous connaissez la révision où le fichier ou le dossier a été supprimé (sinon, utilisez la boîte de dialogue Journal pour le savoir) ouvrez l'explorateur de référentiel et allez à cette révision. Choisissez alors le fichier ou le dossier que vous avez supprimé, faites un clic-droit et choisissez Menu contextuel ? Copier vers... et comme cible pour cette opération de copie, choisissez le chemin de votre copie de travail. 4.14.2. Déplacer des fichiers et des dossiers If you want to do a simple in-place rename of a file or folder, use Context Menu ? Rename... Enter the new name for the item and you're done. If you want to move files around inside your working copy, perhaps to a different sub-folder, use the right-mouse drag-and-drop handler: 1. sélectionnez les fichiers ou les répertoires que vous voulez déplacer 2. glissez-déposer avec le bouton droit ceux-ci au nouvel emplacement à l'intérieur de la copie de travail 3. relâchez le bouton droit de la souris 4. Dans le menu qui apparaît, sélectionnez Menu contextuel ? SVN Déplacer les fichiers dans Subversion ici Livrez le répertoire parent Since renames and moves are done as a delete followed by an add you must commit the parent folder of the renamed/moved file so that the deleted part of the rename/move will show up in the commit dialog. If you don't commit the removed part of the rename/move, it will stay behind in the repository and when your co-workers update, the old file will not be removed. i.e. they will have both the old and the new copies. Vous devez livrer un renommage de dossier avant de changer l'un des fichiers de ce dossier, autrement votre copie de travail peut être vraiment salie. You can also use the repository browser to move items around. Read Section 4.24, « l'explorateur de référentiel » to find out more. Guide d'utilisation quotidienne 89 Ne faites pas SVN Déplacer sur les externes Vous ne devriez pas utiliser les commandes Déplacer ou Renommer de TortoiseSVN sur un dossier qui a été créé en utilisant svn:externals. Cette action causerait la suppression de l'élément externe de son référentiel parent, en dérangeant probablement beaucoup d'autres personnes. Si vous devez déplacer un dossier externe, vous devez utiliser un déplacement ordinaire, ajuster ensuite les propriétés svn:externals des répertoires parents de la source et de la destination. 4.14.3. Modifier la casse dans le nom d'un fichier. Making case-only changes to a filename is tricky with Subversion on Windows, because for a short time during a rename, both filenames have to exist. As Windows has a case-insensitive file system, this does not work using the usual Rename command. Fortunately there are (at least) two possible methods to rename a file without losing its log history. It is important to rename it within subversion. Just renaming in the explorer will corrupt your working copy! Solution A) (recommandée) 1. Livrez les changements dans votre copie de travail. 2. Renommez le fichier MAJUScules en majusCULES directement dans le référentiel en utilisant l'explorateur de référentiel. 3. Mettez à jour votre copie de travail. Solution B) 1. Renommer MAJUScules en MAJUScules_ avec la commande renommer du sous-menu TortoiseSVN. 2. Livrez les changements. 3. Renommer de MAJUScules_ en majusCULES. 4. Livrez les changements. 4.14.4. Gestion des conflits de nom de fichier. If the repository already contains two files with the same name but differing only in case (e.g. TEST.TXT and test.txt), you will not be able to update or checkout the parent directory on a Windows client. Whilst Subversion supports case-sensitive filenames, Windows does not. This sometimes happens when two people commit, from separate working copies, files which happen to have the same name, but with a case difference. It can also happen when files are committed from a system with a case-sensitive file system, like Linux. Dans ce cas, vous devez décider lequel des deux vous voulez conserver et supprimer (ou renommer) l'autre du référentiel. Éviter que deux fichiers aient le même nom Il existe un script hook pour le serveur disponible à : http://svn.collab.net/repos/svn/trunk/ contrib/hook-scripts/ qui préviendra les livraisons qui résultent en conflits de casse. 4.14.5. Réparer les renommages de fichier Sometimes your friendly IDE will rename files for you as part of a refactoring exercise, and of course it doesn't tell Subversion. If you try to commit your changes, Subversion will see the old filename as Guide d'utilisation quotidienne 90 missing and the new one as an unversioned file. You could just check the new filename to get it added in, but you would then lose the history tracing, as Subversion does not know the files are related. A better way is to notify Subversion that this change is actually a rename, and you can do this within the Commit and Check for Modifications dialogs. Simply select both the old name (missing) and the new name (unversioned) and use Context Menu ? Repair Move to pair the two files as a rename. 4.14.6. Supprimer les fichiers non versionnés Usually you set your ignore list such that all generated files are ignored in Subversion. But what if you want to clear all those ignored items to produce a clean build? Usually you would set that in your makefile, but if you are debugging the makefile, or changing the build system it is useful to have a way of clearing the decks. TortoiseSVN provides just such an option using Extended Context Menu ? Delete unversioned items.... You have to hold the Shift while right clicking on a folder in the explorer list pane (right pane) in order to see this in the extended context menu. This will produce a dialog which lists all unversioned files anywhere in your working copy. You can then select or deselect items to be removed. When such items are deleted, the recycle bin is used, so if you make a mistake here and delete a file that should have been versioned, you can still recover it. 4.15. Annuler les changements Si vous voulez défaire tous les changements que vous avez fait dans un fichier depuis la dernière mise à jour, vous devez sélectionner le fichier, faites un clic droit pour faire apparaître le menu contextuel et sélectionnez ensuite la commande TortoiseSVN ? Revenir en arrière Une boîte de dialogue apparaîtra vous montrant les fichiers que vous avez changés et que vous pouvez restaurer. Choisissez ceux que vous voulez restaurer et cliquez sur OK. Figure 4.30. La boîte de dialogue Revenir en arrière Guide d'utilisation quotidienne 91 If you want to undo a deletion or a rename, you need to use Revert on the parent folder as the deleted item does not exist for you to right-click on. If you want to undo the addition of an item, this appears in the context menu as TortoiseSVN ? Undo add.... This is really a revert as well, but the name has been changed to make it more obvious. Les colonnes dans cette boîte de dialogue peuvent être personnalisées de la même manière que les colonnes dans la boîte de dialogue Vérifier les modifications. Lisez Section 4.7.3, « Statut local et distant » pour plus de détails. Annuler les changements qui ont été livrés Revenir en arrière n'annulera que vos changements locaux. Cela n'annulera pas les changements déjà livrés. Si vous voulez annuler tous les changements livrés dans une révision spécifique, lisez Section 4.9, « La boîte de dialogue de Journal de révision » pour plus d'informations. Le retour en arrière est Lent When you revert changes you may find that the operation takes a lot longer than you expect. This is because the modified version of the file is sent to the recycle bin, so you can retrieve your changes if you reverted by mistake. However, if your recycle bin is full, Windows takes a long time to find a place to put the file. The solution is simple: either empty the recycle bin or deactivate the Use recycle bin when reverting box in TortoiseSVN's settings. 4.16. Nettoyer Si une commande Subversion ne peut pas s'achever avec succès, peut-être en raison de problèmes serveur, votre copie de travail peut être laissée dans un état incohérent. Dans ce cas, vous devez utiliser TortoiseSVN ? Nettoyer sur le dossier. C'est une bonne idée de le faire au niveau supérieur de la copie de travail. Cleanup has another useful side effect. If a file date changes but its content doesn't, Subversion cannot tell whether it has really changed except by doing a byte-by-byte comparison with the pristine copy. If you have a lot of files in this state it makes acquiring status very slow, which will make many dialogs slow to respond. Executing a Cleanup on your working copy will repair these « broken » timestamps and restore status checks to full speed. Utiliser les horodatages de livraison Des sorties précédentes de Subversion ont été affectées par un bug qui a causé des incohérences dans l'horodatage quand vous extrayez avec l'option Utiliser les horodatages de livraison cochée. Utilisez la commande Nettoyer pour accélérer ces copies de travail. 4.17. Configuration des projets Guide d'utilisation quotidienne 92 Figure 4.31. Page de propriétés de l'explorateur, onglet Subversion Parfois vous voulez avoir des informations plus détaillées sur un fichier/répertoire qu'un recouvrement d'icône. Vous pouvez obtenir toutes les informations que Subversion fournit dans la boîte de dialogue de propriétés de l'explorateur. Sélectionnez seulement le fichier ou le répertoire et choisissez Menu Windows ? Propriétés dans le menu contextuel (note : c'est l'entrée de menu de propriétés standard que l'explorateur fournit, pas celle du sous-menu TortoiseSVN !). Dans la boîte de dialogue de propriétés, TortoiseSVN a ajouté une nouvelle page de propriété pour les fichiers/dossiers sous le contrôle de Subversion où vous verrez toutes les informations pertinentes concernant le fichier/répertoire sélectionné. 4.17.1. Propriétés Subversion Guide d'utilisation quotidienne 93 Figure 4.32. Page de propriété de subversion You can read and set the Subversion properties from the Windows properties dialog, but also from TortoiseSVN ? properties and within TortoiseSVN's status lists, from Context menu ? properties. You can add your own properties, or some properties with a special meaning in Subversion. These begin with svn:. svn:externals is such a property; see how to handle externals in Section 4.18, « Eléments externes ». 4.17.1.1. svn:keywords Subversion supports CVS-like keyword expansion which can be used to embed filename and revision information within the file itself. Keywords currently supported are: $Date$ Dernière date de livraison connue. Cette information est obtenue quand vous mettez à jour votre copie de travail. Elle ne vérifie pas le référentiel pour trouver d'éventuels changements récents. $Revision$ Révision de la dernière livraison connue. $Author$ Auteur qui a fait la dernière livraison connue. $HeadURL$ Le chemin complet de ce fichier dans le référentiel. $Id$ Une combinaison raccourcie des quatres mot clés précédents. To find out how to use these keywords, look at the svn:keywords section [http://svnbook.red-bean.com/ en/1.5/svn.advanced.props.special.keywords.html] in the Subversion book, which gives a full description of these keywords and how to enable and use them. For more information about properties in Subversion see the Special Properties [http://svnbook.red- bean.com/en/1.5/svn.advanced.props.html]. Guide d'utilisation quotidienne 94 4.17.1.2. Ajouter et Modifier les propriétés Figure 4.33. Ajouter des propriétés Pour ajouter une nouvelle propriété, cliquez d'abord sur Ajouter.... Choisissez le nom de la propriété requise depuis la liste, ou tapez le nom de votre choix, entrez ensuite une valeur dans le champ en dessous. Les propriétés qui prennent des valeurs multiples, comme la liste des ignorés, peuvent être saisies sur plusieurs lignes. Cliquez sur OK pour ajouter la propriété à la liste. Si vous voulez appliquer une propriété à plusieurs éléments à la fois, sélectionnez les fichiers/dossiers dans l'explorateur, puis choisissez Menu contextuel ? Propriétés Si vous voulez appliquer la propriété à tous les fichiers et dossiers au-dessous du dossier actuel dans la hiérarchie , cochez la case Récursive. Certaines propriétés, par exemple svn:needs-lock, peuvent seulement être appliquées aux fichiers, donc le nom de la propriété n'apparaît pas dans la liste déroulante pour les dossiers. Vous pouvez toujours appliquer une telle propriété récursivement à tous les fichiers d'une hiérarchie, mais vous devez taper le nom de la propriété vous même. Si vous voulez éditer une propriété existante, sélectionnez cette propriété dans la liste des propriétés existantes, puis cliquez sur Editer.... Si vous voulez supprimer une propriété existante, sélectionnez cette propriété dans la liste des propriétés existantes, puis cliquez sur Effacer. The svn:externals property can be used to pull in other projects from the same repository or a completely different repository. For more information, read Section 4.18, « Eléments externes ». 4.17.1.3. Exporter et Importer les Propriétés Often you will find yourself applying the same set of properties many times, for example bugtraq:logregex. To simplify the process of copying properties from one project to another, you can use the Export/Import feature. Guide d'utilisation quotidienne 95 From the file or folder where the properties are already set, use TortoiseSVN ? properties, select the properties you wish to export and click on Export.... You will be prompted for a filename where the property names and values will be saved. From the folder(s) where you wish to apply these properties, use TortoiseSVN ? properties and click on Import.... You will be prompted for a filename to import from, so navigate to the place you saved the export file previously and select it. The properties will be added to the folders non-recursively. If you want to add properties to a tree recursively, follow the steps above, then in the property dialog select each property in turn, click on Edit..., check the Apply property recursively box and click on OK. The Import file format is binary and proprietary to TortoiseSVN. Its only purpose is to transfer properties using Import and Export, so there is no need to edit these files. 4.17.1.4. Propriétés TortoiseSVN peut manipuler des valeurs de propriété binaires en utilisant des fichiers. Pour lire une valeur de propriété binaire, Enregistrer... vers un fichier. Pour mettre une valeur binaire, utilisez un éditeur hexadécimal ou un autre outil approprié pour créer un fichier avec le contenu dont vous avez besoin, puis Charger... ce fichier. Bien que les propriétés binaires ne soient pas très utilisées, elles peuvent être utiles dans certaines applications. Par exemple si vous stockez d'énormes fichiers graphiques ou si l'application utilisée pour charger le fichier est énorme, vous pourriez vouloir stocker un aperçu en tant que propriété pour obtenir une prévisualisation rapide. 4.17.1.5. Configuration automatique des propriétés You can configure Subversion and TortoiseSVN to set properties automatically on files and folders when they are added to the repository. There are two ways of doing this. You can edit the subversion configuration file to enable this feature on your client. The General page of TortoiseSVN's settings dialog has an edit button to take you there directly. The config file is a simple text file which controls some of subversion's workings. You need to change two things: firstly in the section headed miscellany uncomment the line enable-auto-props = yes. Secondly you need to edit the section below to define which properties you want added to which file types. This method is a standard subversion feature and works with any subversion client. However it has to be defined on each client individually - there is no way to propagate these settings from the repository. An alternative method is to set the tsvn:autoprops property on folders, as described in the next section. This method only works for TortoiseSVN clients, but it does get propagated to all working copies on update. Whichever method you choose, you should note that auto-props are only applied to files at the time they are added to the repository. Auto-props will never change the properties of files which are already versioned. If you want to be absolutely sure that new files have the correct properties applied, you should set up a repository pre-commit hook to reject commits where the required properties are not set. Livrer les propriétés Les propriétés de Subversion sont versionnées. Après avoir changé ou ajouté une propriété, vous devez livrer vos changements. Guide d'utilisation quotidienne 96 Conflits sur les propriétés S'il y a un conflit en livrant les changements, parce qu'un autre utilisateur a changé la même propriété, Subversion génére un fichier .prej. Supprimez ce fichier après avoir résolu le conflit. 4.17.2. Propriétés du projet TortoiseSVN TortoiseSVN a quelques propriétés spéciales de son cru et elles commencent par tsvn:. ? tsvn:logminsize définit la longueur minimale d'un commentaire pour une livraison. Si vous entrez un message plus court qu'indiqué ici, la livraison est désactivée. Cette fonctionnalité est très utile pour vous rappeler de fournir un message descriptif approprié à chaque livraison. Si cette propriété n'est pas définie, ou si la valeur est zéro, les commentaires vides sont autorisés. tsvn:lockmsgminsize définit la longueur minimale d'un commentaire pour un commentaire de verrou. Si vous entrez un message plus court qu'indiqué ici, le verrouillage est désctivé. Cette fonctionnalité est très utile pour vous rappeler de fournir un message descriptif approprié à chaque verrou. Si cette propriété n'est pas définie, ou si la valeur est zéro, les commentaires de verrou vides sont autorisés. ? tsvn:logwidthmarker est utilisé avec les projets qui exigent que les commentaires soient formatés avec une certaine largeur maximale (généralement 80 caractères) avant un saut de ligne. Définir cette propriété à une valeur non nulle fera 2 choses dans la boîte de dialogue d'entrée de commentaire : cela placera un marqueur pour indiquer la largeur maximale et cela désactivera le retour à la ligne automatique dans l'affichage, pour que vous puissiez voir si le texte que vous avez saisi est trop long. Note : cette fonction ne fonctionnera correctement que si vous avez choisi une police à largeur de caractères fixe pour les commentaires. ? tsvn:logtemplate est utilisé avec les projets qui ont des règles de formatage des commentaires. La propriété contient une chaîne de caractères multi-ligne qui sera insérée dans le champ de message de la livraison quand vous commencez une livraison. Vous pouvez alors l'éditer pour inclure les informations requises. Note : si vous utilisez aussi tsvn:logminsize, assurez-vous de définir une longueur plus longue que le modèle ou vous perdrez le mécanisme de protection. ? Subversion allows you to set « autoprops » which will be applied to newly added or imported files, based on the file extension. This depends on every client having set appropriate autoprops in their subversion configuration file. tsvn:autoprops can be set on folders and these will be merged with the user's local autoprops when importing or adding files. The format is the same as for subversion autoprops, e.g. *.sh = svn:eol-style=native;svn:executable sets two properties on files with the .sh extension. S'il y a un conflit en les propriétés autoprops locales et tsvn:autoprops, les propriétés du projet ont la priorité car elles lui sont spécifiques. ? In the Commit dialog you have the option to paste in the list of changed files, including the status of each file (added, modified, etc). tsvn:logfilelistenglish defines whether the file status is inserted in English or in the localized language. If the property is not set, the default is true. ? TortoiseSVN can use spell checker modules which are also used by OpenOffice and Mozilla. If you have those installed this property will determine which spell checker to use, i.e. in which language the log messages for your project should be written. tsvn:projectlanguage sets the language module the spell checking engine should use when you enter a log message. You can find the values for your language on this page: MSDN: Language Identifiers [http://msdn2.microsoft.com/en-us/library/ ms776260.aspx]. Vous pouvez saisir cette valeur en décimal, ou en hexadécimal si préfixée avec 0x. Par exemple l'Anglais (US) peut être entré comme 0x0409 ou 1033. Guide d'utilisation quotidienne 97 ? La propriété tsvn:logsummary est utilisée pour extraire une partie des commentaires étant destinée à être utilisée comme résumé dans la fenêtre des commentaires. La valeur de la propriété tsvn:logsummary doit être une expression régulière d'une ligne contenant un groupe. Tout ce qui correspond à ce groupe sera utilisé comme résumé. Un exemple : \[SUMMARY\]:\s+(.*) gardera tout ce qui est après « [SUMMARY] » dans le commentaire et l'utilisera comme résumé. ? When you want to add a new property, you can either pick one from the list in the combo box, or you can enter any property name you like. If your project uses some custom properties, and you want those properties to appear in the list in the combo box (to avoid typos when you enter a property name), you can create a list of your custom properties using tsvn:userfileproperties and tsvn:userdirproperties. Apply these properties to a folder. When you go to edit the properties of any child item, your custom properties will appear in the list of pre-defined property names. Some tsvn: properties require a true/false value. TortoiseSVN also understands yes as a synonym for true and no as a synonym for false. TortoiseSVN can integrate with some bug tracking tools. This uses project properties that start with bugtraq:. Read Section 4.28, « Intégration avec des systèmes de bug tracking / traqueurs d'incidents » for further information. It can also integrate with some web-based repository browsers, using project properties that start with webviewer:. Read Section 4.29, « Intégration avec des explorateur de référentiel de type web. » for further information. Fixer les propriétés du projet dans les dossiers These special project properties must be set on folders for the system to work. When you commit a file or folder the properties are read from that folder. If the properties are not found there, TortoiseSVN will search upwards through the folder tree to find them until it comes to an unversioned folder, or the tree root (eg. C:\) is found. If you can be sure that each user checks out only from e.g trunk/ and not some sub-folder, then it is sufficient to set the properties on trunk/. If you can't be sure, you should set the properties recursively on each sub-folder. A property setting deeper in the project hierarchy overrides settings on higher levels (closer to trunk/). For project properties only you can use the Recursive checkbox to set the property to all sub-folders in the hierarchy, without also setting it on all files. Lorsque vous ajoutez un nouveau sous répertoire via TortoiseSVN, toutes les propriétés du projet présentes dans le répertoire parent seront automatiquement ajoutées au nouveau sous répertoire. Attention Although TortoiseSVN's project properties are extremely useful, they only work with TortoiseSVN, and some will only work in newer versions of TortoiseSVN. If people working on your project use a variety of Subversion clients, or possibly have old versions of TortoiseSVN, you may want to use repository hooks to enforce project policies. project properties can only help to implement a policy, they cannot enforce it. 4.18. Eléments externes Sometimes it is useful to construct a working copy that is made out of a number of different checkouts. For example, you may want different files or subdirectories to come from different locations in a repository, Guide d'utilisation quotidienne 98 or perhaps from different repositories altogether. If you want every user to have the same layout, you can define the svn:externals properties to pull in the specified resource at the locations where they are needed. 4.18.1. Répertoires externes Let's say you check out a working copy of /project1 to D:\dev\project1. Select the folder D: \dev\project1, right click and choose Windows Menu ? Properties from the context menu. The Properties Dialog comes up. Then go to the Subversion tab. There, you can set properties. Click Add.... Select the svn:externals property from the combobox and write in the edit box the repository URL in the format url folder or if you want to specify a particular revision, -rREV url folder You can add multiple external projects, 1 per line. Suppose that you have set these properties on D:\dev \project1: http://sounds.red-bean.com/repos sounds http://graphics.red-bean.com/repos/fast%20graphics "quick graphs" -r21 http://svn.red-bean.com/repos/skin-maker skins/toolkit Now click Set and commit your changes. When you (or any other user) update your working copy, Subversion will create a sub-folder D:\dev\project1\sounds and checkout the sounds project, another sub-folder D:\dev\project1\quick_graphs containing the graphics project, and finally a nested sub-folder D:\dev\project1\skins\toolkit containing revision 21 of the skin-maker project. URLs must be properly escaped or they will not work, e.g. you must replace each space with %20 as shown in the second example above. If you want the local path to include spaces or other special characters, you can enclose it in double quotes, or you can use the \ (backslash) character as a Unix shell style escape character preceding any special character. Of course this also means that you must use / (forward slash) as a path delimiter. Note that this behaviour is new in Subversion 1.6 and will not work with older clients. Use explicit revision numbers You should strongly consider using explicit revision numbers in all of your externals definitions, as described above. Doing so means that you get to decide when to pull down a different snapshot of external information, and exactly which snapshot to pull. Besides the common sense aspect of not being surprised by changes to third-party repositories that you might not have any control over, using explicit revision numbers also means that as you backdate your working copy to a previous revision, your externals definitions will also revert to the way they looked in that previous revision, which in turn means that the external working copies will be updated to match they way they looked back when your repository was at that previous revision. For software projects, this could be the difference between a successful and a failed build of an older snapshot of your complex code base. Older svn:externals definitions The format shown here was introduced in Subversion 1.5. You may also see the older format which has the same information in a different order. The new format is preferred as it supports several useful features described below, but it will not work on older clients. The differences are shown in the Subversion Book [http://svnbook.red-bean.com/en/1.5/ svn.advanced.externals.html]. Si le projet externe est dans le même référentiel, les changements que vous faites là seront inclus dans la liste de livraisons quand vous livrerez votre projet principal. Guide d'utilisation quotidienne 99 Si le projet externe est dans un référentiel différent, les changements que vous faites au projet externe seront signalés quand vous livrerez le projet principal, mais vous devez livrer ces changements externes séparément. Si vous utilisez des URL absolues dans la valeur de l'option svn:externals and que vous déplacez votre copie de travail (i.e., si l'URL de votre référentiel change), alors vos références externes ne seront pas mises à jour et ne fonctionneront plus. Pour éviter de tels problèmes, à partir de la version 1.5 du client Subversion permet d'utiliser les chemins relatifs dans les références externes. Quatres méthodes différentes de spécifications d'URL sont supportées. Dans les exemples suivants, considérez qu'il y a deux référentiels: un premier ici http:// exemple.com/svn/repos-1 et un second ici http://exemple.com/svn/repos-2. Nous avons une extraction de http://exemple.com/svn/repos-1/project/trunk dans C: \Working et la propriété svn:externals est activée sur le répertoire trunk. Relatif au répertoire parent. Ces URLs commencent toujours par la chaine de caractère ../ par exemple: ../../widgets/foo common/foo-widget Extraira http://exemple.com/svn/repos-1/widgets/foo dans C:\Working \common\foo-widget. Notez que l'URL est relative à l'URL du répertoire ayant la propriété svn:externals, pas à l'emplacement physique où le répertoire ayant la référence externe est stocké. Relatif à la racine du référentiel Ces URLs commencent toujours par la chaine de caractère ^/ par exemple: ^/widgets/foo common/foo-widget Extraira http://exemple.com/svn/repos-1/widgets/foo dans C:\Working \common\foo-widget. Vous pouvez facilement faire référence à d'autres référentiels ayant le même SVNParentPath (un répertoire commun hébergeant plusieurs référentiels ). Par exemple: ^/../repos-2/hammers/claw common/claw-hammer Extraira http://exemple.com/svn/repos-2/hammers/claw dans C:\Working \common\claw-hammer. Relatif au thème Les URL qui commencent par // ne comportent que la partie "scheme" de l'URL. C'est utile quand l'hôte est accédé de différentes manières selon l'emplacement du client ; i.e. on utilise http:// depuis l'intranet alors que le protocole svn+ssh:// est nécessaire depuis l'extérieur. Par exemple : //exemple.com/svn/repos-1/widgets/foo common/foo-widget Extraira http://exemple.com/svn/repos-1/widgets/foo ou svn+ssh:// exemple.com/svn/repos-1/widgets/foo selon la méthode utilisée pour faire la livraison de C:\Travail. Relatif au nom de domaine du serveur Les URL commençant par la chaine / ne contiennent que la partie "scheme" et le nom d'hôte de l'URI, par exemple : Guide d'utilisation quotidienne 100 /svn/repos-1/widgets/foo common/foo-widget Extraira http://exemple.com/svn/repos-1/widgets/foo dans C:\Travail \common\foo-widget. Mais si vous extrayez votre copie de travail depuis un autre serveur svn+ssh://autre.mirroir.net/svn/repos-1/projet1/trunk alors la référence externe extraira svn+ssh://autre.mirroir.net/svn/repos-1/widgets/foo. You can also specify a peg revision after the URL if required, e.g. http://sounds.red- bean.com/repos@19. Si vous avez besoin de plus d'informations sur la façon dont TortoiseSVN manipule les propriétés, lisez Section 4.17, « Configuration des projets ». Pour découvrir des méthodes différentes d'accéder aux sous-projets communs, lisez Section B.6, « Inclure un sous-projet commun ». 4.18.2. External Files As of Subversion 1.6 you can add single file externals to your working copy using the same syntax as for folders. However, there are some restrictions. ? The path to the file external must place the file in an existing versioned folder. In general it makes most sense to place the file directly in the folder that has svn:externals set, but it can be in a versioned sub-folder if necessary. By contrast, directory externals will automatically create any intermediate unversioned folders as required. ? The URL for a file external must be in the same repository as the URL that the file external will be inserted into; inter-repository file externals are not supported. A file external behaves just like any other versioned file in many respects, but they cannot be moved or deleted using the normal commands; the svn:externals property must be modified instead. File externals support incomplete in Subversion 1.6 In subversion 1.6 it is not possible to remove a file external from your working copy once you have added it, even if you delete the svn:externals property altogether. You have to checkout a fresh working copy to remove the file. 4.19. Brancher / Étiqueter La capacité d'isoler des changements sur une ligne de développement séparée est une des fonctionnalités des systèmes de contrôle de version. Cette ligne est connue comme une branche. Les branches sont souvent utilisées pour expérimenter de nouvelles fonctionnalités sans déranger la ligne de développement principale avec des erreurs de compilation et des bugs. Dès que la nouvelle fonction est assez stable alors la branche de développement est fusionnée vers la branche principale (le tronc). Une autre fonctionnalité des systèmes de contrôle de version est la capacité de marquer des révisions particulières (par exemple une version de sortie), donc vous pouvez à tout moment recréer une certaine construction ou un environnement. Ce processus est connu comme l'étiquetage. Subversion does not have special commands for branching or tagging, but uses so-called « cheap copies » instead. Cheap copies are similar to hard links in Unix, which means that instead of making a complete copy in the repository, an internal link is created, pointing to a specific tree/revision. As a result branches and tags are very quick to create, and take up almost no extra space in the repository. 4.19.1. Créer une branche ou une étiquette Si vous avez importé votre projet avec la structure de répertoire recommandée, créer une version de branche ou d'étiquette est très simple : Guide d'utilisation quotidienne 101 Figure 4.34. La boîte de dialogue Branche/Etiquette Sélectionnez le dossier de votre copie de travail que vous voulez copier dans une branche ou une étiquette, choisissez ensuite la commande TortoiseSVN ? Branche/Étiquette.... L'URL de destination par défaut de la nouvelle branche sera l'URL source sur laquelle votre copie de travail est basée. Vous devrez éditer cette URL vers le nouveau chemin pour votre branche/étiquette. Ainsi au lieu de http://svn.collab.net/repos/ProjectName/trunk vous pourriez maintenant utiliser quelque chose comme http://svn.collab.net/repos/ProjectName/tags/Release_1.10 Si vous ne pouvez pas vous rappeler la convention de nommage que vous avez utilisée la dernière fois, cliquer sur le bouton à droite pour ouvrir l'explorateur de référentiel pour voir la structure du référentiel existante. Maintenant vous devez choisir la source de la copie. Ici vous avez trois options : Guide d'utilisation quotidienne 102 Révision HEAD dans le référentiel La nouvelle branche est copiée directement dans le référentiel de la révision HEAD. Aucune donnée n'a besoin d'être transférée depuis votre copie de travail et la branche est créée très rapidement. Révision spécifique dans le référentiel La nouvelle branche est copiée directement dans le référentiel mais vous pouvez choisir une révision plus vieille. C'est utile si vous avez oublié de faire une étiquette quand vous avez sorti votre projet la semaine dernière. Si vous ne pouvez pas vous rappeler le numéro de révision, cliquez sur le bouton à droite pour afficher le journal de révision et choisir le numéro de révision de là. Là encore, aucune donnée n'est transférée de votre copie de travail et la branche est créée très rapidement. Copie de travail La nouvelle branche est une copie identique à votre copie de travail locale. Si vous avez mis à jour quelques fichiers à une révision plus ancienne dans votre CdT, ou si vous avez fait des changements locaux, c'est exactement ceux-ci qui vont dans la copie. Naturellement cette sorte d'étiquette complexe peut impliquer des transferts de données de votre CdT vers le référentiel si elles n'existent pas déjà là-bas. Si vous voulez que votre copie de travail soit basculée automatiquement sur la branche nouvellement créée, utilisez la case à cocher Déplacer la copie de traval vers une nouvelle branche/étiquette. Mais si vous le faites, assurez-vous d'abord que votre copie de travail ne contient pas de modifications. Si c'est le cas, ces changements seront fusionnés dans la CdT de branche quand vous commutez. Appuyez sur OK pour livrer la nouvelle copie dans le référentiel. N'oubliez pas de fournir un commentaire. Notez que la copie est créée dans le référentiel. Note that unless you opted to switch your working copy to the newly created branch, creating a Branch or Tag does not affect your working copy. Even if you create the branch from your WC, those changes are committed to the new branch, not to the trunk, so your WC may still be marked as modified with respect to the trunk. 4.19.2. Extraire ou aller sur... ...that is (not really) the question. While a checkout downloads everything from the desired branch in the repository to your working directory, TortoiseSVN ? Switch... only transfers the changed data to your working copy. Good for the network load, good for your patience. :-) Pour pouvoir travailler avec votre branche ou votre tag récemments générés, vous avez plusieurs méthodes. Vous pouvez : ? TortoiseSVN ? Extraire pour faire une extraction récente dans un dossier vide. Vous pouvez extraire à n'importe quel emplacement sur votre disque local et vous pouvez créer autant de copies de travail de votre référentiel que vous souhaitez. ? Basculez votre copie de travail courante vers la copie nouvellement créée dans le référentiel. Choisissez de nouveau le dossier de niveau supérieur de votre projet et utilisez TortoiseSVN ? Aller sur... du menu contextuel. Dans la boîte de dialogue suivante, entrez l'URL de la branche que vous venez juste de créer. Choisissez le bouton radio Révsion HEAD et cliquez sur OK. Votre copie de travail est basculée vers la nouvelle branche/étiquette. Aller sur... fonctionne comme Mettre à jour dans le sens où il ne se débarrasse jamais de vos changements locaux. Les changements que vous avez faits à votre copie de travail qui n'ont pas encore été livrés seront fusionnés quand vous faites Aller sur. Si vous ne voulez pas que cela arrive alors vous devez ou livrer les changements avant la bascule, ou faire revenir votre copie de travail à une révision déjà livrée (typiquement HEAD). Guide d'utilisation quotidienne 103 ? If you want to work on trunk and branch, but don't want the expense of a fresh checkout, you can use Windows Explorer to make a copy of your trunk checkout in another folder, then TortoiseSVN ? Switch... that copy to your new branch. Figure 4.35. La boîte de dialogue Aller sur Bien que Subversion lui-même ne fasse aucune distinction entre les étiquettes et les branches, la manière dont elles sont typiquement utilisées diffère un peu. ? Les étiquettes sont typiquement utilisées pour créer un instantané statique du projet à une étape particulière. Comme tels, ils ne sont normalement pas utilisés pour le développement - c'est à cela que servent les branches, c'est la raison pour laquelle nous avons recommandé la structure de référentiel /trunk /branches /tags en premier lieu. Travailler sur une révision d'étiquette n'est pas une bonne idée, mais parce que vos fichiers locaux ne sont pas protégés en écriture, il n'y a rien pour vous empêcher de faire cela par erreur. Cependant, si vous essayez de livrer vers un chemin dans le référentiel qui contient /tags/, TortoiseSVN vous avertira. ? Il peut arriver que vous devez faire de nouveaux changements à une sortie que vous avez déjà étiquetée. La façon correcte de le gérer est de créer d'abord une nouvelle branche à partir de l'étiquette et livrer cette branche. Faites vos changements sur cette branche et créez ensuite une nouvelle étiquette depuis cette nouvelle branche, par exemple Version_1.0.1. ? Si vous modifiez une copie de travail créée à partir d'une branche et livrez, alors tous les changements vont sur la nouvelle branche et pas sur le tronc. Seules les modifications sont stockées. Le reste reste une copie peu coûteuse. 4.20. Fusionner Quand les branches sont utilisées pour maintenir des lignes séparées de développement, à une certaine étape vous voudrez fusionner les changements faits sur une branche vers le tronc, ou vice versa. It is important to understand how branching and merging works in Subversion before you start using it, as it can become quite complex. It is highly recommended that you read the chapter Branching and Merging [http://svnbook.red-bean.com/en/1.5/svn.branchmerge.html] in the Subversion book, which gives a full description and many examples of how it is used. The next point to note is that merging always takes place within a working copy. If you want to merge changes into a branch, you have to have a working copy for that branch checked out, and invoke the merge wizard from that working copy using TortoiseSVN ? Merge.... En général, c'est une bonne idée d'exécuter une fusion dans une copie de travail inchangée. Si vous avez fait d'autres changements à votre CdT, livrez les d'abord. Si la fusion ne se déroule pas comme prévu, Guide d'utilisation quotidienne 104 vous pouvez vouloir annuler les changements et la commande Revenir en arrière supprimera tous les changements en incluant ceux effectués avant la fusion. There are three common use cases for merging which are handled in slightly different ways, as described below. The first page of the merge wizard asks you to select the method you need. Fusionner une plage de révisions Cette méthode couvre le cas où vous avez fait une ou plusieurs révisions sur une branche (ou sur le tronc) et vous voulez reporter ces changements vers une autre branche. Ce que vous demandez à Subversion est de : « Calculer les modifications nécessaires pour passer [DE] la révision 1 de la branche A [A] la révision 7 de la branche A, et d'appliquer ces modifications à la copie de travail (de la racine ou de la branche B). » Réintégrer une branche This method covers the case when you have made a feature branch as discussed in the Subversion book. All trunk changes have been ported to the feature branch, week by week, and now the feature is complete you want to merge it back into the trunk. Because you have kept the feature branch synchronized with the trunk, the latest versions of branch and trunk will be absolutely identical except for your branch changes. This is a special case of the tree merge described below, and it requires only the URL to merge from (normally) your development branch. It uses the merge-tracking features of Subversion to calculate the correct revision ranges to use, and perform additional checks which ensure that the branch has been fully updated with trunk changes. This ensures that you don't accidentally undo work that others have committed to trunk since you last synchronized changes. Après la fusion, toutes les branches de développement ont été complètement fusionnées avec la version de tête. La branches est donc redondante et peut être supprimée. Once you have performed a reintegrate merge you should not continue to use it for development. The reason for this is that if you try to resynchronize your existing branch from trunk later on, merge tracking will see your reintegration as a trunk change that has not yet been merged into the branch, and will try to merge the branch-to-trunk merge back into the branch! The solution to this is simply to create a new branch from trunk to continue the next phase of your development. Fusionner deux arborescences différentes This is a more general case of the reintegrate method. What you are asking Subversion to do is: « Calculate the changes necessary to get [FROM] the head revision of the trunk [TO] the head revision of the branch, and apply those changes to my working copy (of the trunk). » The net result is that trunk now looks exactly like the branch. If your server/repository does not support merge-tracking then this is the only way to merge a branch back to trunk. Another use case occurs when you are using vendor branches and you need to merge the changes following a new vendor drop into your trunk code. For more information read the chapter on vendor branches [http://svnbook.red-bean.com/en/1.5/svn.advanced.vendorbr.html] in the Subversion Book. 4.20.1. Fusionner une plage de révisions Guide d'utilisation quotidienne 105 Figure 4.36. Assistant de fusion - Sélectionner une gamme de révisions In the From: field enter the full folder URL of the branch or tag containing the changes you want to port into your working copy. You may also click ... to browse the repository and find the desired branch. If you have merged from this branch before, then just use the drop down list which shows a history of previously used URLs. In the Revision range to merge field enter the list of revisions you want to merge. This can be a single revision, a list of specific revisions separated by commas, or a range of revisions separated by a dash, or any combination of these. Important There is an important difference in the way a revision range is specified with TortoiseSVN compared to the command line client. The easiest way to visualise it is to think of a fence with posts and fence panels. With the command line client you specify the changes to merge using two « fence post » revisions which specify the before and after points. With TortoiseSVN you specify the changeset to merge using « fence panels ». The reason for this becomes clear when you use the log dialog to specify revisions to merge, where each revision appears as a changeset. If you are merging revisions in chunks, the method shown in the subversion book will have you merge 100-200 this time and 200-300 next time. With TortoiseSVN you would merge 100-200 this time and 201-300 next time. Guide d'utilisation quotidienne 106 This difference has generated a lot of heat on the mailing lists. We acknowledge that there is a difference from the command line client, but we believe that for the majority of GUI users it is easier to understand the method we have implemented. The easiest way to select the range of revisions you need is to click on Show Log, as this will list recent changes with their log comments. If you want to merge the changes from a single revision, just select that revision. If you want to merge changes from several revisions, then select that range (using the usual Shift-modifier). Click on OK and the list of revision numbers to merge will be filled in for you. Si vous voulez revenir sur des modifications déjà livrées de votre copie de travail, sélectionnez les révisions à annuler et vérifiez bien que la case Fusion inversée est cochée. If you have already merged some changes from this branch, hopefully you will have made a note of the last revision merged in the log message when you committed the change. In that case, you can use Show Log for the Working Copy to trace that log message. Remembering that we are thinking of revisions as changesets, you should Use the revision after the end point of the last merge as the start point for this merge. For example, if you have merged revisions 37 to 39 last time, then the start point for this merge should be revision 40. If you are using the merge tracking features of Subversion, you do not need to remember which revisions have already been merged - Subversion will record that for you. If you leave the revision range blank, all revisions which have not yet been merged will be included. Read Section 4.20.6, « Suivi des fusions » to find out more. Si d'autres personnes peuvent livrer des changements alors soyez prudents en utilisant de la révision HEAD. Elle peut ne pas faire référence à la révision à laquelle vous pensez si quelqu'un d'autre a fait une livraison après votre dernière mise à jour. Cliquez le bouton Suivant et allez à Section 4.20.4, « Options de fusion » 4.20.2. Réintégrer une branche Guide d'utilisation quotidienne 107 Figure 4.37. Assistant de fusion - Réintégration To merge a feature branch back into the trunk you must start the merge wizard from within a working copy of the trunk. In the From URL: field enter the full folder URL of the branch that you want to merge back. You may also click ... to browse the repository. There are some conditions which apply to a reintegrate merge. Firstly, the server must support merge tracking. The working copy must be of depth infinite (no sparse checkouts), and it must not have any local modifications, switched items or items that have been updated to revisions other than HEAD. All changes to trunk made during branch development must have been merged across to the branch (or marked as having been merged). The range of revisions to merge will be calculated automatically. 4.20.3. Fusionner deux arbres différents Guide d'utilisation quotidienne 108 Figure 4.38. Assitant de de fusion - Fusion d'arborescence If you are using this method to merge a feature branch back to trunk, you need to start the merge wizard from within a working copy of trunk. In the From: field enter the full folder URL of the trunk. This may sound wrong, but remember that the trunk is the start point to which you want to add the branch changes. You may also click ... to browse the repository. Remplissez le champ To: par l'adresse complète de la branche. Dans les deux champs Depuis la révision et À la révision, entrez le numéro de la dernière révision à laquelle les deux arbres ont été synchronisés. Si vous êtes sûrs que personne d'autre ne fait de livraisons vous pouvez utiliser la révision HEAD dans les deux cas. S'il y a une chance que quelqu'un d'autre puisse avoir fait une livraison depuis cette synchronisation, utilisez le numéro de la révision particulière pour éviter pour perdre des livraisons plus récentes. Vous pouvez également utiliser Voir les Messages de Log pour sélectionner la révision. 4.20.4. Options de fusion This page of the wizard lets you specify advanced options, before starting the merge process. Most of the time you can just use the default settings. You can specify the depth to use for the merge, i.e. how far down into your working copy the merge should go. The depth terms used are described in Section 4.3.1, « Profondeur d'extraction ». The default depth is Working copy, which uses the existing depth setting, and is almost always what you want. Guide d'utilisation quotidienne 109 Most of the time you want merge to take account of the file's history, so that changes relative to a common ancestor are merged. Sometimes you may need to merge files which are perhaps related, but not in your repository. For example you may have imported versions 1 and 2 of a third party library into two separate directories. Although they are logically related, Subversion has no knowledge of this because it only sees the tarballs you imported. If you attempt to merge the difference between these two trees you would see a complete removal followed by a complete add. To make Subversion use only path- based differences rather than history-based differences, check the Ignore ancestry box. Read more about this topic in the Subversion book, Noticing or Ignoring Ancestry [http://svnbook.red-bean.com/en/1.5/ svn.branchmerge.advanced.html#svn.branchmerge.advanced.ancestry] You can specify the way that line ending and whitespace changes are handled. These options are described in Section 4.10.2, « Options de fins de ligne et d'espacement ». The default behaviour is to treat all whitespace and line-end differences as real changes to be merged. If you are using merge tracking and you want to mark a revision as having been merged, without actually doing the merge here, check the Only record the merge checkbox. There are two possible reasons you might want to do this. It may be that the merge is too complicated for the merge algorithms, so you code the changes by hand, then mark the change as merged so that the merge tracking algorithm is aware of it. Or you might want to prevent a particular revision from being merged. Marking it as already merged will prevent the merge occurring with merge-tracking-aware clients. Now everything is set up, all you have to do is click on the Merge button. If you want to preview the results Test Merge performs the merge operation, but does not modify the working copy at all. It shows you a list of the files that will be changed by a real merge, and notes those areas where conflicts will occur. The merge progress dialog shows each stage of the merge, with the revision ranges involved. This may indicate one more revision than you were expecting. For example if you asked to merge revision 123 the progress dialog will report « Merging revisions 122 through 123 ». To understand this you need to remember that Merge is closely related to Diff. The merge process works by generating a list of differences between two points in the repository, and applying those differences to your working copy. The progress dialog is simply showing the start and end points for the diff. 4.20.5. Prévisualiser les résultats de la fusion The merge is now complete. It's a good idea to have a look at the merge and see if it's as expected. Merging is usually quite complicated. Conflicts often arise if the branch has drifted far from the trunk. For Subversion clients and servers prior to 1.5, no merge information is stored and merged revisions have to be tracked manually. When you have tested the changes and come to commit this revision, your commit log message should always include the revision numbers which have been ported in the merge. If you want to apply another merge at a later time you will need to know what you have already merged, as you do not want to port a change more than once. For more information about this, refer to Best Practices for Merging [http://svnbook.red-bean.com/en/1.4/ svn.branchmerge.copychanges.html#svn.branchmerge.copychanges.bestprac] in the Subversion book. If your server and all clients are running Subversion 1.5 or higher, the merge tracking facility will record the revisions merged and avoid a revision being merged more than once. This makes your life much simpler as you can simply merge the entire revision range each time and know that only new revisions will actually be merged. La gestion de branches est importante. Si vous voulez conserver cette branche à jour avec le tronc, vous devriez vous assurer de fusionner souvent pour que la branche et le tronc ne dérivent pas trop loin. Bien sûr, vous devriez toujours éviter la fusion répétée de changements, comme expliquée ci-dessus. Astuce If you have just merged a feature branch back into the trunk, the trunk now contains all the new feature code, and the branch is obsolete. You can now delete it from the repository if required. Guide d'utilisation quotidienne 110 Important Subversion can't merge a file with a folder and vice versa - only folders to folders and files to files. If you click on a file and open up the merge dialog, then you have to give a path to a file in that dialog. If you select a folder and bring up the dialog, then you must specify a folder URL for the merge. 4.20.6. Suivi des fusions Subversion 1.5 introduced facilities for merge tracking. When you merge changes from one tree into another, the revision numbers merged are stored and this information can be used for several different purposes. ? Vous pouvez éviter ke danger de fusionner deux fois la même révision(problème de fusions répétées). Dès qu'une révision a été marquée comme ayant été fusionnée, les fusions futures incluant cette révision dans leur plage de révisions l'ignoreront. ? Quand vous fusionnez une branche dans le trunk, la fenêtre de log peut vous montrer les livraisons de la branche comme faisant partie des messages de log du trunk, donnant une meilleure traçabilité des modifications. ? When you show the log dialog from within the merge dialog, revisions already merged are shown in grey. ? Quand l'information de bannissement d'un fichier est affichée, vous pouvez choisir de montrer les auteurs des révisions fusionnées, au lieu de la personne ayant fait la fusion. ? Vous pouvez marquer les révisions comme n'étant pas à fusionner en les incluant dans la liste des révisions fusionnées mais sans vraiment faire la fusion. Merge tracking information is stored in the svn:mergeinfo property by the client when it performs a merge. When the merge is committed the server stores that information in a database, and when you request merge, log or blame information, the server can respond appropriately. For the system to work properly you must ensure that the server, the repository and all clients are upgraded. Earlier clients will not store the svn:mergeinfo property and earlier servers will not provide the information requested by new clients. Find out more about merge tracking from Subversion's Merge tracking documentation [http:// subversion.tigris.org/merge-tracking/index.html]. 4.20.7. Gérer les conflits durant la fusion. Merging does not always go smoothly. Sometimes there is a conflict, and if you are merging multiple ranges, you generally want to resolve the conflict before merging of the next range starts. TortoiseSVN helps you through this process by showing the merge conflict callback dialog. Guide d'utilisation quotidienne 111 Figure 4.39. La boîte de dialogue de conflit de fusion Quand la fusion génère un conflit, vous avez trois moyens de le gérer : 1. You may decide that your local changes are much more important, so you want to discard the version from the repository and keep your local version. Or you might discard your local changes in favour of the repository version. Either way, no attempt is made to merge the changes - you choose one or the other. 2. Normally you will want to look at the conflicts and resolve them. In that case, choose the Edit Conflict which will start up your merge tool. When you are satisfied with the result, click Resolved. 3. The last option is to postpone resolution and continue with merging. You can choose to do that for the current conflicted file, or for all files in the rest of the merge. However, if there are further changes in that file, it will not be possible to complete the merge. If you do not want to use this interactive callback, there is a checkbox in the merge progress dialog Merge non-interactive. If this is set for a merge and the merge would result in a conflict, the file is marked as in conflict and the merge goes on. You will have to resolve the conflicts after the whole merge is finished. If it is not set, then before a file is marked as conflicted you get the chance to resolve the conflict during the merge. This has the advantage that if a file gets multiple merges (multiple revisions apply a change to that file), subsequent merges might succeed depending on which lines are affected. But of course you can't walk away to get a coffee while the merge is running ;) 4.20.8. Fusionner une branche complétée If you want to merge all changes from a feature branch back to trunk, then you can use the TortoiseSVN ? Merge reintegrate... from the extended context menu (hold down the Shift key while you right click on the file). Guide d'utilisation quotidienne 112 Figure 4.40. La boîte de dialogue de fusion This dialog is very easy. All you have to do is set the options for the merge, as described in Section 4.20.4, « Options de fusion ». The rest is done by TortoiseSVN automatically using merge tracking. 4.20.9. Branche de maintenance d'une fonctionnalité Quand vous développez une nouvelle fonctionnalité dans une branche séparée c'est une bonne pratique de garder en tête la réintégration de cette branche lorsque la nouvelle fonctionnalité sera prête. Si la branche principale (la trunk) évolue en même temps, il est probable que les différences seront nombreuses, rendant l'intégration cauchemardesque. Si la fonctionnalité est relativement simple et que le développement ne prend pas beaucoup de temps, vous pouvez adoptez une solution simple, qui consiste à garder une branche distincte, que vous intégrerez lorsque le développement sera fini. Dans l'assistant de fusion, ce devrait n'être qu'un simple Fusionner une gamme de révisions, la gamme de révisions couvrant la période de développement de la branche. If the feature is going to take longer and you need to account for changes in trunk, then you need to keep the branch synchronised. This simply means that periodically you merge trunk changes into the branch, so that the branch contains all the trunk changes plus the new feature. The synchronisation process uses Merge a range of revisions. When the feature is complete then you can merge it back to trunk using either Reintegrate a branch or Merge two different trees. 4.21. Verrouiller Subversion fonctionne généralement mieux sans verrouillage, en utilisant les méthodes « Copier- Modifier-Fusionner » décrites plus tôt dans Section 2.2.3, « La solution Copier-Modifier-Fusionner ». Cependant il y a quelques cas où vous pouvez devoir mettre en oeuvre une certaine forme de politique de verrouillage. ? Vous utilisez des fichiers « non fusionnables », par exemple, des fichiers graphiques. Si deux personnes changent le même fichier, la fusion n'est pas possible, donc l'un d'entre elles perdra ses changements. ? Votre société a toujours utilisé un VCS verrouillant par le passé et il y a eu une décision de la part des gestionnaires que « le verrouillage est la meilleure solution ». Premièrement, vous devez vous assurer que votre serveur Subversion est mis à jour au moins à la version 1.2. Les versions précédentes ne supportent pas le verrouillage. Si vous utilisez un accès de type file://, alors il est sûr que votre client doit être mis à jour. Guide d'utilisation quotidienne 113 4.21.1. Comment le verrouillage fonctionne dans Subversion Par défaut, rien n'est verrouillé et quiconque a un accès en livraison peut livrer des changements à n'importe quel fichier à tout moment. Les autres mettront à jour leurs copies de travail périodiquement et les changements du référentiel seront fusionnés avec les changements locaux. Si vous obtenez un verrou sur un fichier, alors vous seul pouvez livrer ce fichier. Les livraisons des autres utilisateurs seront bloquées jusqu'à ce que vous relâchiez le verrou. Un fichier verrouillé ne peut être modifié d'aucune façon dans le référentiel, il ne peut donc pas être supprimé ou renommé non plus, sauf par le propriétaire du verrou. Toutefois, les autres utilisateurs ne sauront pas nécessairement que vous avez pris un verrou. À moins qu'ils ne vérifient le statut du verrou régulièrement, ils le sauront la première fois lorsque leur livraison échouera, ce qui n'est pas très utile dans la plupart des cas. Pour rendre la gestion des verrous plus facile, il existe une nouvelle propriété Subversion svn:needs-lock. Quand cette propriété est définie (avec n'importe quelle valeur) sur un fichier, chaque fois que le fichier est extrait ou mis à jour, la copie locale est mise en lecture seule à moins que la copie de travail ne détienne un verrou pour le fichier. Cela agit comme un avertissement pour ne pas éditer ce fichier à moins que vous n'ayez d'abord acquis un verrou. Les fichiers qui sont versionnés et en lecture seule sont marqués avec un recouvrement spécial dans TortoiseSVN pour indiquer que vous devez acquérir un verrou avant l'édition. Les verrous sont enregistrées par emplacement de copie de travail et par propriétaire. Si vous avez plusieurs copies de travail (à la maison, au travail) alors vous pouvez seulement détenir un verrou dans une de ces copies de travail. Si l'un de vos collaborateurs acquiert un verrou et part ensuite en vacances sans le relâcher, que faites- vous ? Subversion fournit un moyen de forcer les verrous. Relâcher un verrou détenu par quelqu'un d'autre est connu comme Casser le verrou et l'acquisition de force d'un verrou déjà détenu par quelqu'un d'autre s'appelle Voler le verrou. Naturellement, ce ne sont pas des choses que vous devriez faire à la légère si vous voulez rester ami avec vos collaborateurs. Les verrous sont enregistrés dans le référentiel et un jeton de verrouillage est créé dans votre copie de travail locale. S'il y a une incohérence, par exemple si quelqu'un d'autre a cassé le verrou, le jeton de verrouillage local devient invalide. Le référentiel est toujours la référence définitive. 4.21.2. Obtenir un verrou Sélectionnez les fichiers dans votre copie de travail pour lesquels vous voulez acquérir un verrou, puis sélectionnez la commande TortoiseSVN ? Obtenir un verrou.... Guide d'utilisation quotidienne 114 Figure 4.41. La boîte de dialogue Verrouiller Une boîte de dialogue apparaît, vous permettant de saisir un commentaire, pour que les autres puissent voir pourquoi vous avez verrouiller le fichier. Le commentaire est facultatif et seulement utilisé avec des référentiels basés sur Svnserve actuellement. Si (et seulement si ) vous deviez voler le verrou de quelqu'un d'autre, cochez la case Voler les verrous, cliquez ensuite sur OK. Si vous sélectionnez un dossier et utilisez ensuite TortoiseSVN ? Obtenir un verrou... la boîte de dialogue Verrouiller s'ouvrira avec tous les fichiers de tous les sous-dossiers choisis pour les verrouiller. C'est la bonne manière de faire si vous voulez vraiment verrouiller une arborescence complète, cependant vous pourriez devenir très impopulaire avec vos collaborateurs si vous les empêchez d'accéder au projet. À utiliser avec parcimonie... 4.21.3. Relâcher un verrou Pour vous assurer de ne pas oubliez de relâcher un verrou dont vous n'avez plus besoin, les fichiers verrouillés sont affichés dans la boîte de dialogue de livraison et sélectionnés par défaut. Si vous continuez la livraison, les verrous que vous détenez sur les fichiers sélectionnés sont supprimés, même si les fichiers n'ont pas été modifiés. Si vous ne voulez pas relâcher les verrous de certains fichiers, vous pouvez les décocher (s'ils ne sont pas modifiés). Si vous voulez garder un verrou sur un fichier que vous avez modifié, vous devez activer la case à cocher Garder les verrous avant livrer vos changements. Pour relâcher un verrou manuellement, sélectionnez les fichiers dans votre copie de travail pour lesquels vous voulez relâcher les verrous, choisissez ensuite la commande TortoiseSVN ? Relâcher un verrou Il n'y a rien d'autre à faire donc TortoiseSVN va contacter le référentiel et relâcher les verrous. Vous pouvez aussi utiliser cette commande sur un dossier pour relâcher tous les verrous récursivement. Guide d'utilisation quotidienne 115 4.21.4. Vérifier le statut des verrous Figure 4.42. La boîte de dialogue Vérifier les modifications Pour voir quels verrous les autres et vous détenez, vous pouvez utiliser TortoiseSVN ? Vérifier les modifications.... Les jetons des verrous détenus localement s'afficheront immédiatement. Pour vérifier les verrous détenus par les autres (et voir si l'un de vos verrous est cassé ou volé) vous devez cliquer sur Vérifier le référentiel. À partir du menu contextuel ici, vous pouvez aussi bien obtenir et relâcher des verrous, que casser et voler des verrous détenus par d'autres. Évitez de casser et de voler les verrous Si vous cassez ou volez le verrou de quelqu'un d'autre sans le lui dire, vous pourriez potentiellement causer une perte du travail. Si vous travaillez avec des types de fichier non fusionnables et que vous volez le verrou de quelqu'un d'autre, une fois que vous relâchez le verrou, ils sont libres de livrer leurs changements et d'écraser les vôtres. Subversion ne perd pas de données, mais vous avez perdu la protection du travail en équipe que le verrouillage vous a donnée. 4.21.5. Mettre les fichiers non verrouillés en Lecture seule Comme mentionné ci-dessus, la façon la plus efficace d'utiliser le verrouillage est de mettre la propriété svn:needs-lock sur les fichiers. Référez-vous à Section 4.17, « Configuration des projets » pour les instructions sur la façon de définir les propriétés. Les fichiers avec cette propriété définie seront toujours extraits et mis à jour avec l'attribut Lecture seule défini à moins que votre copie de travaill ne détienne un verrou. Pour vous le rappeler, TortoiseSVN utilise un recouvrement spécial pour l'indiquer. Si vous pratiquez une politique où chaque fichier doit être verrouillé, vous pouvez trouver alors plus facile d'utiliser la fonctionnalité auto-props de Subversion pour définir la propriété automatiquement à chaque fois vous ajoutez de nouveaux fichiers. Lisez Section 4.30, « Configuration de TortoiseSVN » pour plus d'informations. Guide d'utilisation quotidienne 116 4.21.6. Les scripts hook de verrouillage Quand vous créez un nouveau référentiel avec Subversion 1.2 ou supérieur, quatre modèles de hooks sont créés dans le répertoire hooks du référentiel. Ceux-ci sont appelés avant et après l'obtention d'un verrou et avant et après la libération d'un verrou. C'est une bonne idée d'installer un script hook post-lock et post-unlock sur le serveur qui envoie un e-mail indiquant que le fichier a été verrouillé. Avec une tel script en place, tous vos utilisateurs peuvent être informés si quelqu'un verrouille/déverrouille un fichier. Vous pouvez trouver un script hook exemple hooks/post-lock.tmpl dans le dossier de votre référentiel. Vous pourriez aussi utiliser des hooks pour rejeter la casse ou le vol de verrous, ou les limiter peut-être à un administrateur nommé. Ou peut-être vous voulez envoyer un email au propriétaire quand un de ses verrous est cassé ou volé. Lisez Section 3.3, « Scripts de hook côté serveur » pour en savoir plus. 4.22. Créer et appliquer des patches Pour les projets open-source (comme celui-ci), tout le monde a accès au référentiel en lecture et tout le monde peut contribuer au projet. Alors comment ces contributions sont-elles contrôlées ? Si tout le monde pouvait livrer des changements, le projet serait instable en permanence et probablement cassé en permanence. Dans cette situation, le changement est géré en soumettant un fichier patch à l'équipe de développement, qui a accès en écriture. Ils peuvent passer en revue le patch d'abord et ensuite le soumettre au référentiel ou le renvoyer à l'auteur. Les fichiers patch sont simplement des fichiers de différences unifiées montrant les différences entre votre copie de travail et la révision de base. 4.22.1. Créer un patch D'abord vous devez faire et tester vos changements. Alors au lieu d'utiliser TortoiseSVN ? Livrer... sur le dossier parent, vous sélectionnez TortoiseSVN ? Créer un patch... Figure 4.43. La boîte de dialogue Créer un patch Guide d'utilisation quotidienne 117 Vous pouvez maintenant choisir les fichiers que vous voulez inclure dans le patch, comme vous le feriez avec une livraison complète. Cela produira un unique fichier contenant un résumé de tous les changements que vous avez faits aux fichiers sélectionnés depuis la dernière mise à jour du référentiel. Les colonnes dans cette boîte de dialogue peuvent être personnalisées de la même manière que les colonnes dans la boîte de dialogue Vérifier les modifications. Lisez Section 4.7.3, « Statut local et distant » pour plus de détails. Vous pouvez produire des patches séparés contenant des changements sur des jeux différents de fichiers. Bien sûr, si vous créez un fichier patch, faire un peu plus de modifications aux mêmes fichiers et créez ensuite un autre patch, le deuxième fichier patch inclura les deux jeux de changements. Sauvegardez juste le fichier en utilisant un nom de fichier de votre choix. Les patches peuvent avoir l'extension de votre choix, mais selon la convention ils devraient utiliser les extensions .patch ou .diff. Vous êtes maintenant prêt à soumettre votre patch. You can also save the patch to the clipboard instead of to a file. You might want to do this so that you can paste it into an email for review by others. Or if you have two working copies on one machine and you want to transfer changes from one to the other, a patch on the clipboard is a convenient way of doing this. 4.22.2. Appliquer un patch Patch files are applied to your working copy. This should be done from the same folder level as was used to create the patch. If you are not sure what this is, just look at the first line of the patch file. For example, if the first file being worked on was doc/source/english/chapter1.xml and the first line in the patch file is Index: english/chapter1.xml then you need to apply the patch to the doc/ source/ folder. However, provided you are in the correct working copy, if you pick the wrong folder level, TortoiseSVN will notice and suggest the correct level. Pour appliquer un patch à votre copie de travail, vous devez avoir au moins l'accès en lecture pour le référentiel. La raison à cela est que le programme de fusion doit faire référence aux changements de la révision avec laquelle ils ont été faits par le développeur distant. From the context menu for that folder, click on TortoiseSVN ? Apply Patch... This will bring up a file open dialog allowing you to select the patch file to apply. By default only .patch or .diff files are shown, but you can opt for « All files ». If you previously saved a patch to the clipboard, you can use Open from clipboard... in the file open dialog. Alternativement, si le fichier patch a une extension .patch ou .diff, vous pouvez faire un clic droit dessus directement et sélectionnez TortoiseSVN ? Appliquer un patch.... Dans ce cas, vous serez invités à entrer un emplacement de copie de travail. Ces deux méthodes offrent juste des façons différentes de faire la même chose. Avec la première méthode, vous choisissez la CdT et naviguez jusqu'au patch. Avec la deuxième, vous choisissez le patch et naviguez jusqu'à la CdT. Une fois que vous avez sélectionné le fichier patch et l'emplacement de la copie de travail, TortoiseMerge se lance pour fusionner les changements du fichier patch avec votre copie de travail. Une petite fenêtre liste les fichiers qui ont été changés. Double-cliquez sur chacun à son tour, passez en revue les changements et sauvegardez les fichiers fusionnés. Le patch du développeur distant a maintenant été appliqué à votre copie de travail, donc vous devez livrer pour permettre à tous les autres d'avoir accès aux changements depuis le référentiel. 4.23. Qui a changé quelle ligne ? Parfois, vous avez besoin de connaître non seulement quelles lignes ont changé, mais aussi exactement qui a changé des lignes spécifiques dans un fichier. C'est à ce moment que la commande TortoiseSVN ? Condamner..., parfois aussi mentionnée comme la commande annoter devient pratique. Guide d'utilisation quotidienne 118 Cette commande liste, pour chaque ligne d'un fichier, l'auteur et la révision où la ligne a été changée. 4.23.1. Condamner pour les fichiers Figure 4.44. La boîte de dialogue Condamner / Annoter Si vous n'êtes pas intéressés par les changements des révisions précédentes, vous pouvez définir la révision d'où la condamnation devrait commencer. Mettez cela à 1, si vous voulez la condamnation pour toutes les révisions. Par défaut le fichier de condamnation est visualisé en utilisant TortoiseBlame, qui met en évidence les différentes révisions pour le rendre plus facile à lire. Si vous voulez imprimer ou éditer le fichier de condamnation, sélectionnez Utiliser le visualisateur texte pour voir les condamnations You can specify the way that line ending and whitespace changes are handled. These options are described in Section 4.10.2, « Options de fins de ligne et d'espacement ». The default behaviour is to treat all whitespace and line-end differences as real changes, but if you want to ignore an indentation change and find the original author, you can choose an appropriate option here. Une fois que vous cliquez sur OK TortoiseSVN commence à récupérer les données pour créer le fichier de condamnation. Veuillez noter : Cela peut prendre plusieurs minutes, selon le nombre de fois que le fichier a été modifié et bien sûr, selon votre connexion réseau au référentiel. Une fois que le processus de condamnation a terminé, le résultat est écrit dans un fichier temporaire et vous pouvez voir les résultats. Guide d'utilisation quotidienne 119 Figure 4.45. TortoiseBlame TortoiseBlame, qui est inclus avec TortoiseSVN, rend le fichier de condamnation plus facile à lire. Quand vous survolez avec la souris une ligne dans la colonne de renseignements de la condamnation, toutes les lignes avec la même révision sont affichées avec un fond plus sombre. Les lignes d'autres révisions qui ont été changées par le même auteur sont affichées avec un fond clair. La coloration peut ne pas fonctionner aussi clairement si vous avez votre affichage en mode 256 couleurs. Si vous faites un clic gauche sur une ligne, toutes les lignes avec la même révision sont mises en évidence et les lignes d'autres révisions du même auteur sont mises en évidence dans une couleur plus claire. Cette accentuation est figée, vous permettant de déplacer la souris sans perdre les points en évidence. Cliquez sur cette révision de nouveau pour arrêter l'accentuation. Les commentaires de révision (commentaire du journal) sont affichés dans une info-bulle à chaque fois que la souris survole la colonne d'information de la condamnation. Si vous voulez copier le commentaire de cette révision, utilisez le menu contextuel qui apparaît quand vous faites un clic droit sur la colonne d'information de la condamnation. Vous pouvez faire des recherches dans le rapport de condamnation en utilisant Éditer ? Rechercher.... Cela vous permet de chercher des numéros de révision, des auteurs et le contenu du fichier lui-même. Les commentaires ne sont pas inclus dans la recherche - vous devriez utiliser la boîte de dialogue de Journal pour rechercher dedans. Vous pouvez aussi aller à une ligne particulière en utilisant Editer ? Aller à la ligne.... When the mouse is over the blame info columns, a context menu is available which helps with comparing revisions and examining history, using the revision number of the line under the mouse as a reference. Context menu ? Blame previous revision generates a blame report for the same file, but using the previous revision as the upper limit. This gives you the blame report for the state of the file just before the line you are looking at was last changed. Context menu ? Show changes starts your diff viewer, showing you what changed in the referenced revision. Context menu ? Show log displays the revision log dialog starting with the referenced revision. Guide d'utilisation quotidienne 120 If you need a better visual indicator of where the oldest and newest changes are, select View ? Color age of lines. This will use a colour gradient to show newer lines in red and older lines in blue. The default colouring is quite light, but you can change it using the TortoiseBlame settings. If you are using Merge Tracking, where lines have changed as a result of merging from another path, TortoiseBlame will show the revision and author of the last change in the original file rather than the revision where the merge took place. These lines are indicated by showing the revision and author in italics. If you do not want merged lines shown in this way, uncheck the Include merge info checkbox. Si vous souhaitez voir les chemins concernés dans la fusion, sélectionnez Voir ? Chemins Fusionnés. Les paramètres de TortoiseBlame peuvent être affiché en sélectionnant TortoiseSVN ? Paramètres... dans l'onglet TortoiseBlame. Voir Section 4.30.9, « Configuration de TortoiseBlame ». 4.23.2. Condamner les différences L'une des limitations du rapport de condamnation est qu'il ne montre que le fichier tel qu'il était à une révision particulière et montre la dernière personne à avoir changé chaque ligne. Parfois vous voulez connaître quel changement a été fait, et aussi qui l'a fait. Ce dont vous avez ici besoin est une combinaison des rapports de condamnation et de comparaison. La boîte de dialogue du journal de révision inclut plusieurs options vous permettant de faire cela. Condamner les révisions Dans le panneau supérieur, sélectionnez 2 révisions, puis sélectionnez Menu contextuel ? Condamner les révisions. Cela parcoura les données de condamnation pour les 2 révisions puis utilisera le visualisateur de différences pour comparer les deux fichiers de condamnation. Bannir les modifications Select one revision in the top pane, then pick one file in the bottom pane and select Context menu ? Blame changes. This will fetch the blame data for the selected revision and the previous revision, then use the diff viewer to compare the two blame files. Comparez et condamner avec la BASE de travail Affichez le journal pour un seul fichier et, dans le panneau supérieur, choisissez une seule révision, puis sélectionnez Menu contextuel ? Comparer et condamner avec la BASE de travail. Cela ira chercher les données de condamnation pour la révision choisie et pour le fichier dans la BASE de travail, puis utilisera ensuite le visualisateur de différences pour comparer les deux fichiers de condamnation. 4.24. l'explorateur de référentiel Parfois, vous devez travailler directement sur le référentiel, sans avoir de copie de travail. C'est à cela que sert le Explorateur de référentiel. Comme l'explorateur et les recouvrements d'icône qui vous permettent de voir votre copie de travail, l'explorateur de référentiel vous permet de voir la structure et le statut du référentiel. Guide d'utilisation quotidienne 121 Figure 4.46. l'explorateur de référentiel Avec l'explorateur de référentiel vous pouvez exécuter des commandes comme copier, déplacer, renommer... directement sur le référentiel. The repository browser looks very similar to the Windows explorer, except that it is showing the content of the repository at a particular revision rather than files on your computer. In the left pane you can see a directory tree, and in the right pane are the contents of the selected directory. At the top of the Repository Browser Window you can enter the URL of the repository and the revision you want to browse. Tout comme dans l'explorateur Windows, vous pouvez clicquer sur les en-têtes des colonnes dans le panneau de droite si vous voulez modifier le tri. Et comme dans l'explorateur il yu a des menus contextuels ans les deux panneaux. Le menu contextuel pour un fichier vous permet de : ? Ouvrir le fichier sélectionné, avec le visualisateur par défaut pour ce type de fichier, ou avec le programme de votre choix. ? Récupérer une copie non versionnée du fichier sur votre disque dur. ? Show the revision log for that file, or show a graph of all revisions so you can see where the file came from. ? Condamner le fichier pour voir qui a modifier quelle ligne et quand. ? Supprimez ou renommez le fichier. ? Make a copy of the file, either to a different part of the repository, or to a working copy rooted in the same repository. Guide d'utilisation quotidienne 122 ? Voir/Modifier les propriétés du fichier Le menu contextuel pour un dossier vous permet de : ? Voir l'historique des messages de log de ce répertoire, ou voir le graphique de toutes les révisions afin de pouvoir savoir d'où vient ce répertoire. ? Exporter le répertoire vers une copie non versionnée sur votre disque dur. ? Extraire le répertoire pour avoir une version de travail sur votre disque dur. ? Créez un nouveau répertoire dans le référentiel ? Ajouter directement des fichiers ou des répertoires dans le référentiel. ? Supprimez ou renommez le répertoire. ? Make a copy of the folder, either to a different part of the repository, or to a working copy rooted in the same repository. ? Voir/Modifier les propriétés du dossier. ? Marque le répertoire pour la comparaison. Un nom d'un répertoire marqué est en gras. ? Compare the folder with a previously marked folder, either as a unified diff, or as a list of changed files which can then be visually diffed using the default diff tool. This can be particularly useful for comparing two tags, or trunk and branch to see what changed. If you select two folders in the right pane, you can view the differences either as a unified-diff, or as a list of files which can be visually diffed using the default diff tool. If you select multiple folders in the right pane, you can checkout all of them at once into a common parent folder. Si vous sélectionnez 2 étiquettes qui sont copiées depuis la même racine (typiquement /trunk/), vous pouvez utiliser Menu contextuel ? Voir le journal pour voir la liste des révisions entre les deux points d'étiquettes. You can use F5 to refresh the view as usual. This will refresh everything which is currently displayed. If you want to pre-fetch or refresh the information for nodes which have not been opened yet, use Ctrl- F5. After that, expanding any node will happen instantly without a network delay while the information is fetched. You can also use the repository browser for drag-and-drop operations. If you drag a folder from explorer into the repo-browser, it will be imported into the repository. Note that if you drag multiple items, they will be imported in separate commits. If you want to move an item within the repository, just left drag it to the new location. If you want to create a copy rather than moving the item, Ctrl-left drag instead. When copying, the cursor has a « plus » symbol on it, just as it does in Explorer. If you want to copy/move a file or folder to another location and also give it a new name at the same time, you can right drag or Ctrl-right drag the item instead of using left drag. In that case, a rename dialog is shown where you can enter a new name for the file or folder. Quand vous faites des changements dans le référentiel en utilisant l'une de ces méthodes, une boîte de dialogue de saisie de commentaire vous sera présentée. Si vous avez glissé quelque chose par erreur, c'est aussi une chance pour annuler l'action. Guide d'utilisation quotidienne 123 Sometimes when you try to open a path you will get an error message in place of the item details. This might happen if you specified an invalid URL, or if you don't have access permission, or if there is some other server problem. If you need to copy this message to include it in an email, just right click on it and use Context Menu ? Copy error message to clipboard, or simply use Ctrl+C. 4.25. Graphiques de révision Figure 4.47. Un graphique de révision Parfois vous avez besoin de savoir à quel moment les branches et les étiquettes ont été prises du tronc et la façon idéale de voir ce genre d'informations est comme un graphique ou une structure arborescente. C'est à ce moment que vous devez utiliser TortoiseSVN ? Graphique de révision Cette commande analyse l'historique des révisions et essaye de créer un arbre montrant les points auxquels les copies ont été prises et quand les branches/étiquettes ont été supprimées. Important In order to generate the graph, TortoiseSVN must fetch all log messages from the repository root. Needless to say this can take several minutes even with a repository of a few thousand revisions, depending on server speed, network bandwidth, etc. If you try this with something like the Apache project which currently has over 500,000 revisions you could be waiting for some time. Guide d'utilisation quotidienne 124 The good news is that if you are using log caching, you only have to suffer this delay once. After that, log data is held locally. Log caching is enabled in TortoiseSVN's settings. 4.25.1. Graphiques des révisions Each revision graph node represents a revision in the repository where something changed in the tree you are looking at. Different types of node can be distinguished by shape and colour. The shapes are fixed, but colours can be set using TortoiseSVN ? Settings Eléments ajoutés ou copiés Items which have been added, or created by copying another file/folder are shown using a rounded rectangle. The default colour is green. Tags and trunks are treated as a special case and use a different shade, depending on the TortoiseSVN ? Settings Elements supprimés Deleted items eg. a branch which is no longer required, are shown using an octagon (rectangle with corners cut off). The default colour is red. Elements renommés Renamed items are also shown using an octagon, but the default colour is blue. Révision de pointe de branche The graph is normally restricted to showing branch points, but it is often useful to be able to see the respective HEAD revision for each branch too. If you select Show HEAD revisions, each HEAD revision nodes will be shown as an ellipse. Note that HEAD here refers to the last revision committed on that path, not to the HEAD revision of the repository. Working copy revision If you invoked the revision graph from a working copy, you can opt to show the BASE revision on the graph using Show WC revision, which marks the BASE node with a bold outline. Modified working copy If you invoked the revision graph from a working copy, you can opt to show an additional node representing your modified working copy using Show WC modifications. This is an elliptical node with a bold outline in red by default. Element normal Tous les autres éléments sont affichés en utilisant un rectangle plat. Note that by default the graph only shows the points at which items were added, copied or deleted. Showing every revision of a project will generate a very large graph for non-trivial cases. If you really want to see all revisions where changes were made, there is an option to do this in the View menu and on the toolbar. The default view (grouping off) places the nodes such that their vertical position is in strict revision order, so you have a visual cue for the order in which things were done. Where two nodes are in the same column the order is very obvious. When two nodes are in adjacent columns the offset is much smaller because there is no need to prevent the nodes from overlapping, and as a result the order is a little less obvious. Such optimisations are necessary to keep complex graphs to a reasonable size. Please note that this ordering uses the edge of the node on the older side as a reference, i.e. the bottom edge of the node when the graph is shown with oldest node at the bottom. The reference edge is significant because the node shapes are not all the same height. 4.25.2. Changer l'affichage Because a revision graph is often quite complex, there are a number of features which can be used to tailor the view the way you want it. These are available in the View menu and from the toolbar. Guide d'utilisation quotidienne 125 Groupe les branches The default behavior (grouping off) has all rows sorted strictly by revision. As a result, long-living branches with sparse commits occupy a whole column for only a few changes and the graph becomes very broad. This mode groups changes by branch, so that there is no global revision ordering: Consecutive revisions on a branch will be shown in (often) consecutive lines. Sub-branches, however, are arranged in such a way that later branches will be shown in the same column above older branches to keep the graph slim. As a result, a given row may contain changes from different revisions. Les plus anciens en haut Normally the graph shows the oldest revision at the bottom, and the tree grows upwards. Use this option to grow down from the top instead. Aligner les arborescences en haut When a graph is broken into several smaller trees, the trees may appear either in natural revision order, or aligned at the bottom of the window, depending on whether you are using the Group Branches option. Use this option to grow all trees down from the top instead. Réduire les intersections If the layout of the graph has produced a lot of crossing lines, use this option to clean it up. This may make the layout columns appear in less logical places, for example in a diagonal line rather than a column, and the graph may require a larger area to draw. Differential path names Long path names can take a lot of space and make the node boxes very large. Use this option to show only the changed part of a path, replacing the common part with dots. E.g. if you create a branch /branches/1.2.x/doc/html from /trunk/doc/html the branch could be shown in compact form as /branches/1.2.x/.. because the last two levels, doc and html, did not change. Montrer toutes les révisions This does just what you expect and shows every revision where something (in the tree that you are graphing) has changed. For long histories this can produce a truly huge graph. Montrer la version de tête (HEAD) This ensures that the latest revision on every branch is always shown on the graph. Copie exacte des sources When a branch/tag is made, the default behaviour is to show the branch as taken from the last node where a change was made. Strictly speaking this is inaccurate since the branches are often made from the current HEAD rather than a specific revision. So it is possible to show the more correct (but less useful) revision that was used to create the copy. Note that this revision may be younger than the HEAD revision of the source branch. Replier les étiquettes When a project has many tags, showing every tag as a separate node on the graph takes a lot of space and obscures the more interesting development branch structure. At the same time you may need to be able to access the tag content easily so that you can compare revisions. This option hides the nodes for tags and shows them instead in the tooltip for the node that they were copied from. A tag icon on the right side of the source node indicates that tags were made. Cacher les répertoires supprimés Hides paths which are no longer present at the HEAD revision of the repository, e.g. deleted branches. Hide unchanged branches Hides branches where no changes were committed to the respective file or sub-folder. This does not necessarily indicate that the branch was not used, just that no changes were made to this part of it. Montrer la version de la CdT Marks the revision on the graph which corresponds to the update revision of the item you fetched the graph for. If you have just updated, this will be HEAD, but if others have committed changes Guide d'utilisation quotidienne 126 since your last update your WC may be a few revisions lower down. The node is marked by giving it a bold outline. Montrer les modifications de la CdT If your WC contains local changes, this option draws it as a separate elliptical node, linked back to the node that your WC was last updated to. The default outline colour is red. You may need to refresh the graph using F5 to capture recent changes. filtrer Sometimes the revision graph contains more revisions than you want to see. This option opens a dialog which allows you to restrict the range of revisions displayed, and to hide particular paths by name. Tree stripes Where the graph contains several trees, it is sometimes useful to use alternating colours on the background to help distinguish between trees. Montrer l'aperçu Shows a small picture of the entire graph, with the current view window as a rectangle which you can drag. This allows you to navigate the graph more easily. Note that for very large graphs the overview may become useless due to the extreme zoom factor and will therefore not be shown in such cases. 4.25.3. Utiliser le Graphique de révisions To make it easier to navigate a large graph, use the overview window. This shows the entire graph in a small window, with the currently displayed portion highlighted. You can drag the highlighted area to change the displayed region. La date de révision, l'auteur et les commentaires sont affichés dans une info-bulle chaque fois que la souris survole une boîte de révision. If you select two revisions (Use Ctrl-left click), you can use the context menu to show the differences between these revisions. You can choose to show differences as at the branch creation points, but usually you will want to show the differences at the branch end points, i.e. at the HEAD revision. Vous pouvez voir les différences avec un fichier de différences unifiées, qui montre toutes les différences dans un seul fichier avec un contexte minimal. Si vous optez pour Menu contextuel ? Comparer les révisions, vous vous retrouvez avec une liste des fichiers modifiés. Double-cliquez sur un nom de fichier pour aller chercher les deux révisions du fichier et les comparer en utilisant l'outil de comparaison visuel. Si vous faites un clic droit sur une révision, vous pouvez utiliser Menu contextuel ? Voir le journal pour voir l'historique. You can also merge changes in the selected revision(s) into a different working copy. A folder selection dialog allows you to choose the working copy to merge into, but after that there is no confirmation dialog, nor any opportunity to try a test merge. It is a good idea to merge into an unmodified working copy so that you can revert the changes if it doesn't work out! This is a useful feature if you want to merge selected revisions from one branch to another. Learn to Read the Revision Graph First-time users may be surprised by the fact that the revision graph shows something that does not match the user's mental model. If a revision changes multiple copies or branches of a file or folder, for instance, then there will be multiple nodes for that single revision. It is a good practice to start with the leftmost options in the toolbar and customize the graph step-by-step until it comes close to your mental model. All filter options try lose as little information as possible. That may cause some nodes to change their color, for instance. Whenever the result is unexpected, undo the last filter Guide d'utilisation quotidienne 127 operation and try to understand what is special about that particular revision or branch. In most cases, the initially expected outcome of the filter operation would either be inaccurate or misleading. 4.25.4. Refraichissement de l'affichage If you want to check the server again for newer information, you can simply refresh the view using F5. If you are using the log cache (enabled by default), this will check the repository for newer commits and fetch only the new ones. If the log cache was in offline mode, this will also attempt to go back online. If you are using the log cache and you think the message content or author may have changed, you should use the log dialog to refresh the messages you need. Since the revision graph works from the repository root, we would have to invalidate the entire log cache, and refilling it could take a very long time. 4.25.5. Pruning Trees A large tree can be difficult to navigate and sometimes you will want to hide parts of it, or break it down into a forest of smaller trees. If you hover the mouse over the point where a node link enters or leaves the node you will see one or more popup buttons which allow you to do this. Click on the minus button to collapse the attached sub-tree. Click on the plus button to expand a collapsed tree. When a tree has been collapsed, this button remains visible to indicate the hidden sub-tree. Click on the cross button to split the attached sub-tree and show it as a separate tree on the graph. Click on the circle button to reattach a split tree. When a tree has been split away, this button remains visible to indicate that there is a separate sub-tree. Click on the graph background for the main context menu, which offers options to Expand all and Join all. If no branch has been collapsed or split, the context menu will not be shown. 4.26. Exporter une copie de travail Subversion Sometimes you may want a copy of your working tree without any of those .svn directories, e.g. to create a zipped tarball of your source, or to export to a web server. Instead of making a copy and then deleting all those .svn directories manually, TortoiseSVN offers the command TortoiseSVN ? Export.... Exporting from a URL and exporting from a working copy are treated slightly differently. Guide d'utilisation quotidienne 128 Figure 4.48. La fenêtre extraction-depuis-une-URL If you execute this command on an unversioned folder, TortoiseSVN will assume that the selected folder is the target, and open a dialog for you to enter the URL and revision to export from. This dialog has options to export only the top level folder, to omit external references, and to override the line end style for files which have the svn:eol-style property set. Bien sûr, vous pouvez aussi exporter directement depuis le référentiel. Utilisez l'explorateur de référentiel pour naviguer au sous-arbre pertinent dans votre référentiel, utilisez ensuite Menu contextuel ? Exporter. Vous obtiendrez la boîte de dialogue Exporter depuis l'URL décrite ci-dessus. If you execute this command on your working copy you'll be asked for a place to save the clean working copy without the .svn folders. By default, only the versioned files are exported, but you can use the Export unversioned files too checkbox to include any other unversioned files which exist in your WC and not in the repository. External references using svn:externals can be omitted if required. Another way to export from a working copy is to right drag the working copy folder to another location and choose Context Menu ? SVN Export here or Context Menu ? SVN Export all here. The second option includes the unversioned files as well. When exporting from a working copy, if the target folder already contains a folder of the same name as the one you are exporting, you will be given the option to overwrite the existing content, or to create a new folder with an automatically generated name, eg. Target (1). Extraire quelques fichiers La boite de dialogue d'exportation ne permet pas d'extraire juste quelques fichiers, même si Subversion le permet. To export single files with TortoiseSVN, you have to use the repository browser (Section 4.24, « l'explorateur de référentiel »). Simply drag the file(s) you want to export from the repository browser to where you want them in the explorer, or use the context menu in the repository browser to export the files. Guide d'utilisation quotidienne 129 Exporter une Arborescence des Modifications If you want to export a copy of your project tree structure but containing only the files which have changed in a particular revision, or between any two revisions, use the compare revisions feature described in Section 4.10.3, « Comparer des répertoires ». 4.26.1. Retirer une copie de travail du contrôle de version Sometimes you have a working copy which you want to convert back to a normal folder without the .svn directories. What you really need is an export-in-place command, that just removes the control directories rather than generating a new clean directory tree. The answer is surprisingly simple - export the folder to itself! TortoiseSVN detects this special case and asks if you want to make the working copy unversioned. If you answer yes the control directories will be removed and you will have a plain, unversioned directory tree. 4.27. Relocaliser une copie de travail Figure 4.49. La boîte de dialogue Relocaliser If your repository has for some reason changed it's location (IP/URL). Maybe you're even stuck and can't commit and you don't want to checkout your working copy again from the new location and to move all your changed data back into the new working copy, TortoiseSVN ? Relocate is the command you are looking for. It basically does very little: it scans all entries files in the .svn folder and changes the URL of the entries to the new value. You may be surprised to find that TortoiseSVN contacts the repository as part of this operation. All it is doing is performing some simple checks to make sure that the new URL really does refer to the same repository as the existing working copy. Avertissement C'est une opération très rare. La commande relocaliser est utilisée seulement si l'URL de la racine du référentiel a changé. Les raisons possibles sont : ? L'adresse IP du serveur a changé. ? Le protocole a changé (par exemple http:// en https: //). ? Le chemin de la racine du référentiel a changé dans le paramétrage du serveur. Guide d'utilisation quotidienne 130 Autrement, vous devez relocaliser quand votre copie de travail se réfère au même emplacement dans le même référentiel, mais le référentiel lui-même a été déplacé. Elle ne s'applique pas si : ? Vous voulez vous déplacer vers un référentiel Subversion différent. Dans ce cas, vous devriez exécuter une extraction fraîche à partir du nouvel emplacement du référentiel. ? Vous voulez aller sur une branche différente ou sur un répertoire dans le même référentiel. Pour ce faire, vous devriez utiliser TortoiseSVN ? Aller sur.... Lisez Section 4.19.2, « Extraire ou aller sur... » pour plus d'informations. Si vous utilisez relocaliser dans n'importe lequel des cas ci-dessus, cela corrompra votre copie de travail et vous obtiendrez beaucoup de messages d'erreur inexplicables en mettant à jour, en livrant, etc. Une fois que cela s'est produit, la seule correction est une extraction fraiche. 4.28. Intégration avec des systèmes de bug tracking / traqueurs d'incidents Il est très fréquent dans le développement logiciel que les changements soient liés à un bug spécifique ou à un ID d'incident. Les utilisateurs de systèmes de traque de bug (traqueurs d'incidents) voudraient associer les changements qu'ils font dans Subversion avec un ID spécifique dans leur traqueur d'incidents. La plupart des traqueurs fournissent donc un script hook de pre-commit qui analyse syntaxiquement le commentaire pour trouver l'ID du bug auquel la livraison est associée. C'est quelque peu sujet aux erreurs puisque cela compte sur l'utilisateur pour écrire le commentaire correctement pour que le script hook de pre-commit puisse en faire l'analyse syntaxique correctement. TortoiseSVN peut aider l'utilisateur de deux manières : 1. Quand l'utilisateur entre un commentaire, une ligne bien définie incluant le numéro de l'incident associé à la livraison peut être ajoutée automatiquement. Cela réduit le risque que l'utilisateur entre le numéro de l'incident d'une façon que les outils de traque de bugs ne peuvent pas analyser correctement. Ou TortoiseSVN peut mettre en évidence la partie du commentaire saisi qui est reconnu par le traqueur d'incidents. De cette façon, l'utilisateur sait que le commentaire peut être correctement analysé syntaxiquement. 2. Quand l'utilisateur parcourt les commentaires, TortoiseSVN crée un lien à partir de chaque ID de bug dans le commentaire qui lance le navigateur à l'incident mentionné. 4.28.1. Ajouter des numéros de bugs aux messages de log You can integrate a bug tracking tool of your choice in TortoiseSVN. To do this, you have to define some properties, which start with bugtraq:. They must be set on Folders: (Section 4.17, « Configuration des projets ») There are two ways to integrate TortoiseSVN with issue trackers. One is based on simple strings, the other is based on regular expressions. The properties used by both approaches are: bugtraq:url Set this property to the URL of your bug tracking tool. It must be properly URI encoded and it has to contain %BUGID%. %BUGID% is replaced with the Issue number you entered. This allows TortoiseSVN to display a link in the log dialog, so when you are looking at the revision log you can jump directly to your bug tracking tool. You do not have to provide this property, but then TortoiseSVN shows only the issue number and not the link to it. e.g the TortoiseSVN project is using http://issues.tortoisesvn.net/?do=details&id=%BUGID% Guide d'utilisation quotidienne 131 You can also use relative URLs instead of absolute ones. This is useful when your issue tracker is on the same domain/server as your source repository. In case the domain name ever changes, you don't have to adjust the bugtraq:url property. There are two ways to specify a relative URL: If it begins with the string ^/ it is assumed to be relative to the repository root. For example, ^/../?do=details&id=%BUGID% will resolve to http://tortoisesvn.net/? do=details&id=%BUGID% if your repository is located on http://tortoisesvn.net/ svn/trunk/. A URL beginning with the string / is assumed to be relative to the server's hostname. For example /?do=details&id=%BUGID% will resolve to http://tortoisesvn.net/? do=details&id=%BUGID% if your repository is located anywhere on http:// tortoisesvn.net. bugtraq:warnifnoissue Set this to true, if you want TortoiseSVN to warn you because of an empty issue-number text field. Valid values are true/false. If not defined, false is assumed. 4.28.1.1. Numéro de Bug dans un Champ Texte Dans l'approche simple, TortoiseSVN montre à l'utilisateur un champ de saisie séparé où un ID de bug peut être entré. Une ligne séparée est alors ajoutée avant/après le commentaire que l'utilisateur a saisi. bugtraq:message This property activates the bug tracking system in Input field mode. If this property is set, then TortoiseSVN will prompt you to enter an issue number when you commit your changes. It's used to add a line at the end of the log message. It must contain %BUGID%, which is replaced with the issue number on commit. This ensures that your commit log contains a reference to the issue number which is always in a consistent format and can be parsed by your bug tracking tool to associate the issue number with a particular commit. As an example you might use Issue : %BUGID%, but this depends on your Tool. bugtraq:append Cette propriété définit si l'ID-bug est ajouté (true) à la fin du commentaire ou inséré (false) au début du commentaire. Les valeurs valables sont true/false. Si elle n'est pas définie, true est par défaut, pour que les projets existants ne cassent pas. bugtraq:label This text is shown by TortoiseSVN on the commit dialog to label the edit box where you enter the issue number. If it's not set, Bug-ID / Issue-Nr: will be displayed. Keep in mind though that the window will not be resized to fit this label, so keep the size of the label below 20-25 characters. bugtraq:number If set to true only numbers are allowed in the issue-number text field. An exception is the comma, so you can comma separate several numbers. Valid values are true/false. If not defined, true is assumed. 4.28.1.2. Numéros de Bug en Utilisant des Expressions Régulières In the approach with regular expressions, TortoiseSVN doesn't show a separate input field but marks the part of the log message the user enters which is recognized by the issue tracker. This is done while the user writes the log message. This also means that the bug ID can be anywhere inside a log message! This method is much more flexible, and is the one used by the TortoiseSVN project itself. bugtraq:logregex This property activates the bug tracking system in Regex mode. It contains either a single regular expressions, or two regular expressions separated by a newline. If two expressions are set, then the first expression is used as a pre-filter to find expressions which contain bug IDs. The second expression then extracts the bare bug IDs from the result of the first Guide d'utilisation quotidienne 132 regex. This allows you to use a list of bug IDs and natural language expressions if you wish. e.g. you might fix several bugs and include a string something like this: « This change resolves issues #23, #24 and #25 » Si vous voulez isoler les ID des bugs tels qu'utilisés à l'intérieur des messages de log, vous pouvez utiliser utiliser les espressions régulières suivantes, qui sont celles utilisées par TortoiseSVN en personne : [Ii]ssues?:?(\s*(,|and)?\s*#\d+)+ et (\d+) The first expression picks out « issues #23, #24 and #25 » from the surrounding log message. The second regex extracts plain decimal numbers from the output of the first regex, so it will return « 23 », « 24 » and « 25 » to use as bug IDs. Breaking the first regex down a little, it must start with the word « issue », possibly capitalised. This is optionally followed by an « s » (more than one issue) and optionally a colon. This is followed by one or more groups each having zero or more leading whitespace, an optional comma or « and » and more optional space. Finally there is a mandatory « # » and a mandatory decimal number. If only one expression is set, then the bare bug IDs must be matched in the groups of the regex string. Example: [Ii]ssue(?:s)? #?(\d+) This method is required by a few issue trackers, e.g. trac, but it is harder to construct the regex. We recommend that you only use this method if your issue tracker documentation tells you to. If you are unfamiliar with regular expressions, take a look at the introduction at http:// en.wikipedia.org/wiki/Regular_expression, and the online documentation and tutorial at http:// www.regular-expressions.info/. Si les deux propriétés bugtraq:message et bugtraq:logregex sont définies, logregex a la priorité. Astuce Même si vous n'avez pas de traqueur d'incidents avec un hook pre-commit analysant syntaxiquement vos commentaires, vous pouvez toujours utiliser cela pour transformer les incidents mentionnés dans vos commentaires en liens ! And even if you don't need the links, the issue numbers show up as a separate column in the log dialog, making it easier to find the changes which relate to a particular issue. Some tsvn: properties require a true/false value. TortoiseSVN also understands yes as a synonym for true and no as a synonym for false. Mettre les propriétés sur les dossiers These properties must be set on folders for the system to work. When you commit a file or folder the properties are read from that folder. If the properties are not found there, TortoiseSVN will search upwards through the folder tree to find them until it comes to an unversioned folder, or the tree root (eg. C:\) is found. If you can be sure that each user checks out only from e.g trunk/ and not some sub-folder, then it's enough if you set the properties on trunk/. If you can't be sure, you should set the properties recursively on each sub-folder. A property setting deeper in the project hierarchy overrides settings on higher levels (closer to trunk/). For tsvn: properties only you can use the Recursive checkbox to set the property to all sub-folders in the hierarchy, without also setting it on all files. Guide d'utilisation quotidienne 133 No Issue Tracker Information from Repository Browser Because the issue tracker integration depends upon accessing subversion properties, you will only see the results when using a checked out working copy. Fetching properties remotely is a slow operation, so you will not see this feature in action from the repo browser. This issue tracker integration is not restricted to TortoiseSVN; it can be used with any Subversion client. For more information, read the full Issue Tracker Integration Specification [http:// tortoisesvn.tigris.org/svn/tortoisesvn/trunk/doc/issuetrackers.txt] in the TortoiseSVN source repository. (Section 3, « TortoiseSVN est gratuit ! » explains how to access the repository). 4.28.2. Récupérer des Informations depuis un Traqueur de Bug The previous section deals with adding issue information to the log messages. But what if you need to get information from the issue tracker? The commit dialog has a COM interface which allows integration an external program that can talk to your tracker. Typically you might want to query the tracker to get a list of open issues assigned to you, so that you can pick the issues that are being addressed in this commit. Any such interface is of course highly specific to your issue tracker system, so we cannot provide this part, and describing how to create such a program is beyond the scope of this manual. The interface definition and sample plugins in C# and C++/ATL can be obtained from the contrib folder in the TortoiseSVN repository [http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk/contrib/issue-tracker-plugins]. (Section 3, « TortoiseSVN est gratuit ! » explains how to access the repository). A summary of the API is also given in Chapitre 6, IBugtraqProvider interface Another (working) example plugin in C# is Gurtle [http:// code.google.com/p/gurtle/] which implements the required COM interface to interact with the Google Code [http://code.google.com/hosting/] issue tracker. For illustration purposes, let's suppose that your system administrator has provided you with an issue tracker plugin which you have installed, and that you have set up some of your working copies to use the plugin in TortoiseSVN's settings dialog. When you open the commit dialog from a working copy to which the plugin has been assigned, you will see a new button at the top of the dialog. Guide d'utilisation quotidienne 134 Figure 4.50. Exemple de fenêtre de bug tracker In this example you can select one or more open issues. The plugin can then generate specially formatted text which it adds to your log message. 4.29. Intégration avec des explorateur de référentiel de type web. There are several web-based repository viewers available for use with Subversion such as ViewVC [http:// www.viewvc.org/] and WebSVN [http://websvn.tigris.org/]. TortoiseSVN provides a means to link with these viewers. You can integrate a repo viewer of your choice in TortoiseSVN. To do this, you have to define some properties which define the linkage. They must be set on Folders: (Section 4.17, « Configuration des projets ») webviewer:revision Set this property to the URL of your repo viewer to view all changes in a specific revision. It must be properly URI encoded and it has to contain %REVISION%. %REVISION% is replaced with the revision number in question. This allows TortoiseSVN to display a context menu entry in the log dialog Context Menu ? View revision in webviewer webviewer:pathrevision Set this property to the URL of your repo viewer to view changes to a specific file in a specific revision. It must be properly URI encoded and it has to contain %REVISION% and %PATH%. %PATH Guide d'utilisation quotidienne 135 % is replaced with the path relative to the repository root. This allows TortoiseSVN to display a context menu entry in the log dialog Context Menu ? View revision and path in webviewer For example, if you right-click in the log dialog bottom pane on a file entry /trunk/src/file then the %PATH% in the URL will be replaced with /trunk/src/file. You can also use relative URLs instead of absolute ones. This is useful in case your web viewer is on the same domain/server as your source repository. In case the domain name ever changes, you don't have to adjust the webviewer:revision and webviewer:pathrevision property. The format is the same as for the bugtraq:url property. See Section 4.28, « Intégration avec des systèmes de bug tracking / traqueurs d'incidents ». Mettre les propriétés sur les dossiers These properties must be set on folders for the system to work. When you commit a file or folder the properties are read from that folder. If the properties are not found there, TortoiseSVN will search upwards through the folder tree to find them until it comes to an unversioned folder, or the tree root (eg. C:\) is found. If you can be sure that each user checks out only from e.g trunk/ and not some sub-folder, then it's enough if you set the properties on trunk/. If you can't be sure, you should set the properties recursively on each sub-folder. A property setting deeper in the project hierarchy overrides settings on higher levels (closer to trunk/). For tsvn: properties only you can use the Recursive checkbox to set the property to all sub-folders in the hierarchy, without also setting it on all files. No Repo Viewer Links from Repository Browser Because the repo viewer integration depends upon accessing subversion properties, you will only see the results when using a checked out working copy. Fetching properties remotely is a slow operation, so you will not see this feature in action from the repo browser. 4.30. Configuration de TortoiseSVN Pour découvrir à quoi servent les réglages, laissez simplement votre pointeur de souris une seconde sur la saisie/coche... et une info-bulle utile apparaîtra. 4.30.1. Configuration générale Guide d'utilisation quotidienne 136 Figure 4.51. La boîte de dialogue Configuration, page Général Cette boîte de dialogue vous permet de spécifier votre langue préférée et la configuration spécifique à Subversion. Langue Sélectionne la langue de votre interface utilisateur. À quoi d'autre vous attendiez-vous ? Vérifier automatiquement les nouvelles versions chaque semaine Si elle est cochée, TortoiseSVN entrera en contact avec son site de téléchargement une fois par semaine pour voir s'il y a une version plus récente du programme disponible. Utilisez Vérifier maintenant si vous voulez une réponse tout de suite. La nouvelle version ne sera pas téléchargée ; vous recevez simplement une boîte de dialogue d'information vous disant que la nouvelle version est disponible. Sons système TortoiseSVN a trois sons personnalisés qui sont installés par défaut. ? Erreur ? Avis ? Avertissement Vous pouvez choisir des sons différents (ou désactiver ces sons complètement) en utilisant le Panneau de Configuration Windows. Configurer est un raccourci vers le Panneau de Configuration. Modèle d'exclusion global Global ignore patterns are used to prevent unversioned files from showing up e.g. in the commit dialog. Files matching the patterns are also ignored by an import. Ignore files or directories by typing in the names or extensions. Patterns are separated by spaces e.g. bin obj *.bak *.~?? *.jar *.[Tt]mp. These patterns should not include any path separators. Note also that there is no way to differentiate between files and directories. Read Section 4.13.1, « L'utilisation des pattern matching dans la liste des fichier à ignorer » for more information on the pattern-matching syntax. Guide d'utilisation quotidienne 137 Notez que les modèles d'exclusion que vous spécifiez ici affecteront aussi les autres clients Subversion fonctionnant sur votre PC, y compris le client en ligne de commande. Attention Si vous utilisez le fichier de configuration de Subversion pour définir un modèle global-ignores, il ignorera les réglages que vous faites ici. Le fichier de configuration de Subversion est accessible en utilisant Éditer comme décrit ci-dessous. Ce modèle d'exclusion affectera tous vos projets. Ce n'est pas versionné, donc il n'affectera pas les autres utilisateurs. En comparaison, vous pouvez aussi utiliser la propriété versionnée svn:ignore pour exclure des fichiers ou des répertoires du contrôle de version. Lisez Section 4.13, « Ignorer des fichiers et des répertoires » pour plus d'informations. Remplace la date des fichiers par la « date de dernière livraison » This option tells TortoiseSVN to set the file dates to the last commit time when doing a checkout or an update. Otherwise TortoiseSVN will use the current date. If you are developing software it is generally best to use the current date because build systems normally look at the date stamps to decide which files need compiling. If you use « last commit time » and revert to an older file revision, your project may not compile as you expect it to. Fichier de configuration de Subversion Use Edit to edit the Subversion configuration file directly. Some settings cannot be modified directly by TortoiseSVN, and need to be set here instead. For more information about the Subversion config file see the Runtime Configuration Area [http:// svnbook.red-bean.com/en/1.5/svn.advanced.confarea.html]. The section on Automatic Property Setting [http://svnbook.red-bean.com/en/1.5/svn.advanced.props.html#svn.advanced.props.auto] is of particular interest, and that is configured here. Note that Subversion can read configuration information from several places, and you need to know which one takes priority. Refer to Configuration and the Windows Registry [http://svnbook.red-bean.com/en/1.5/ svn.advanced.confarea.html#svn.advanced.confarea.windows-registry] to find out more. Utiliser les répertoires _svn au lieu de .svn VS.NET quand il est utilisé avec des projets web ne peut pas manipuler les répertoires .svn que Subversion utilise pour stocker son information interne. Ce n'est pas un bug de Subversion. Le bug est dans VS.NET et les extensions frontpage qu'il utilise. Lisez Section 4.30.11, « Dossiers de travail de Subversion » pour en savoir plus sur cet incident. Si vous voulez changer le comportement de Subversion et de TortoiseSVN, vous pouvez utiliser cette case à cocher pour définir la variable d'environnement qui contrôle cela. Vous devriez noter que changer cette option ne convertira pas automatiquement les copies de travail existantes pour utiliser le nouveau répertoire d'administration. Vous devrez le faire vous-même en utilisant un script (Voir notre FAQ) ou en extrayant simplement une copie de travail récente. Guide d'utilisation quotidienne 138 4.30.1.1. Paramètres du Menu Contextuel Figure 4.52. La boîte de dialogue de Configuration, Page Menu Contextuel Cette page vous permet de spécifier quelles entrées du menu contextuel de TortoiseSVN s'afficheront dans le menu contextuel principal et lesquelles apparaîtront dans le sous-menu de TortoiseSVN. Par défaut, la plupart des éléments sont décochés et apparaissent dans le sous-menu. There is a special case for Get Lock. You can of course promote it to the top level using the list above, but as most files don't need locking this just adds clutter. However, a file with the svn:needs-lock property needs this action every time it is edited, so in that case it is very useful to have at the top level. Checking the box here means that when a file is selected which has the svn:needs-lock property set, Get Lock will always appear at the top level. If there are some paths on your computer where you just don't want TortoiseSVN's context menu to appear at all, you can list them in the box at the bottom. Guide d'utilisation quotidienne 139 4.30.1.2. Réglages des boîtes de dialogues TortoiseSVN 1 Figure 4.53. La boîte de dialogue Configuration, page Boîtes de dialogue 1 Cette boîte de dialogue vous permet de configurer certaines des boîtes de dialogue de TortoiseSVN de la façon que vous préferez. Nombre par défaut de commentaires Limits the number of log messages that TortoiseSVN fetches when you first select TortoiseSVN ? Show Log Useful for slow server connections. You can always use Show All or Next 100 to get more messages. Police des commentaires Sélectionne le type et la taille de la police de caractères utilisée pour afficher le commentaire lui- même dans le panneau du milieu de la boîte de dialogue du Journal de révision et lors de la rédaction des commentaires dans la boîte de dialogue Livrer. Format court des dates dans les commentaires Si les longs messages standards prennent trop place sur votre écran, utilisez le format court. Vous pouvez double cliquer sur la liste des messages de log pour comparer avec la version précédente If you frequently find yourself comparing revisions in the top pane of the log dialog, you can use this option to allow that action on double-click. It is not enabled by default because fetching the diff is often a long process, and many people prefer to avoid the wait after an accidental double-click, which is why this option is not enabled by default. Boîte de dialogue de progression TortoiseSVN peut fermer automatiquement toutes les boîte de dialogues de progression quand l'action s'est terminée sans erreur. Ce réglage vous permet de choisir les conditions pour fermer les boîtes de dialogues. Le réglage par défaut est Fermeture manuelle ce qui vous permet de passer en revue tous les messages et de contrôler ce qui s'est passé. Cependant, vous pouvez décider que vous voulez ignorer quelques types de message et vouloir que la boîte de dialogue se ferme automatiquement s'il n'y a aucun changement critique. Fermeture automatique s'il n'a y pas eu de fusions, d'ajouts ou de suppression signifie que la boîte de dialogue de progression se fermera s'il y a que de simples mises à jour, mais si les Guide d'utilisation quotidienne 140 changements du référentiel ont été fusionnés avec les vôtres, ou si des fichiers ont été ajoutés ou supprimés, la boîte de dialogue restera ouverte. Elle restera aussi ouverte s'il n'y a pas eu de conflits ou d'erreurs pendant l'opération. Fermeture automatique pour les opérations locales signifie que la boîte de dialogue de progression se fermera comme pour Fermeture automatique s'il n'a y pas eu de fusions, d'ajouts ou de suppression mais seulement pour les opérations locales comme ajouter des fichiers ou revenir en arrière. Pour les opérations distantes, la boîte de dialogue restera ouverte. Fermeture automatique s'il n'y a pas de conflit assoupli les critères un peu plus et fermera la boîte de dialogue même s'il y a eu des fusions, des ajouts ou des suppressions. Cependant, s'il y a des conflits ou des erreurs, la boîte de dialogue reste ouverte. Fermeture automatique s'il n'y a pas d'erreur ferme toujours la boîte de dialogue même s'il y a eu des conflits. La seule condition qui maintient la boîte de dialogue ouverte est un cas d'erreur, qui se produit quand Subversion est incapable d'achever la tâche. Par exemple, une mise à jour échoue parce que le serveur est inaccessible, ou une livraison échoue parce que la copie de travail est périmée. Utiliser la poubelle lors d'un retour en arrière When you revert local modifications, your changes are discarded. TortoiseSVN gives you an extra safety net by sending the modified file to the recycle bin before bringing back the pristine copy. If you prefer to skip the recycle bin, uncheck this option. Utiliser l'URL de la WC comme valeur par défaut pour l'URL « From: » Dans la boîte de dialogue de fusion, le comportement par défaut est de mémoriser l'URL De : entre les fusions. Cependant, certaines personnes aiment exécuter les fusions depuis différents endroits de leur hiérarchie et trouvent plus facile de partir avec l'URL de la copie de travail courante. Elle peut alors être éditée pour se référer à un chemin parallèle sur une autre branche. Chemin d'extraction par défaut You can specify the default path for checkouts. If you keep all your checkouts in one place, it is useful to have the drive and folder pre-filled so you only have to add the new folder name to the end. URL d'extraction par défaut You can also specify the default URL for checkouts. If you often checkout sub-projects of some very large project, it can be useful to have the URL pre-filled so you only have to add the sub-project name to the end. Guide d'utilisation quotidienne 141 4.30.1.3. Réglages des boîtes de dialogues TortoiseSVN 2 Figure 4.54. La boîte de dialogue Configuration, page Boîtes de dialogue 2 Parcourir récursivement les répertoires non versionnés Si cette case est cochée (l'état par défaut), alors à chaque fois que le statut d'un dossier non versionné est affiché dans les boîtes de dialogue Ajouter, Livrer ou Vérifier les modifications, tous les fichiers et tous les dossiers enfants sont aussi affichés. Si vous décochez cette case, seul le parent non versionné est affiché. Décocher réduit le désordre dans ces boîtes de dialogue. Dans ce cas, si vous sélectionnez un dossier non versionné à Ajouter, il est ajouté récursivement. Utiliser la complétion automatique des chemins de fichiers et des mots-clé La boîte de dialogue de livraison inclut une fonction pour analyser syntaxiquement la liste de noms de fichier à livrer. Quand vous tapez les 3 premières lettres d'un élément dans la liste, la boîte de complétion automatique s'ouvre et vous pouvez appuyer sur Entrée pour compléter le nom du fichier. Cochez la case pour activer cette fonctionnalité. Délai en secondes après lequel arrêter le parcours des données de complétion automatique The auto-completion parser can be quite slow if there are a lot of large files to check. This timeout stops the commit dialog being held up for too long. If you are missing important auto-completion information, you can extend the timeout. Utiliser le correcteur orthographique que si tsvn:projectlanguage est défini Si vous ne voulez pas utiliser le vérificateur d'orthographe pour toutes les livraisons, cochez cette case. Le vérificateur d'orthographe sera toujours activé quand les propriétés du projet l'exigent. Maximum d'éléments à garder dans les commentaires récents When you type in a log message in the commit dialog, TortoiseSVN stores it for possible re-use later. By default it will keep the last 25 log messages for each repository, but you can customize that number here. If you have many different repositories, you may wish to reduce this to avoid filling your registry. Note that this setting applies only to messages that you type in on this computer. It has nothing to do with the log cache. Guide d'utilisation quotidienne 142 Ré-ouvrir la boîte de dialogue de livraison après qu'une livraison ait échoué Quand une livraison échoue pour une raison particulière (la copie de travail doit être mise à jour, les hooks pre-commit refusent la livraison, erreur réseau, etc), vous pouvez choisir cette option pour conserver la boîte de dialogue Livrer ouverte prête à recommencer. Cependant, vous devez prendre conscience que cela peut causer des problèmes. Si l'échec signifie que vous devez mettre à jour et que la mise à jour entraîne des conflits, vous devrez d'abord les résoudre. Sélectionner les éléments automatiquement The normal behaviour in the commit dialog is for all modified (versioned) items to be selected for commit automatically. If you prefer to start with nothing selected and pick the items for commit manually, uncheck this box. Contacter le référentiel au démarrage La boîte de dialogue Vérifier les modifications vérifie la copie de travail par défaut et entre seulement en contact avec le référentiel quand vous cliquez sur Vérifier le référentiel. Si vous voulez toujours vérifier le référentiel, vous pouvez utiliser ce réglage pour que cette action se fasse automatiquement. Afficher la boîte de dialogue de verrouillage avant de verrouiller des fichiers Lorsque vous sélectionnez u ou plusieurs fichiers, puis que vous utilisez TortoiseSVN ? Verouillage pour retirer un verrou sur ces fichiers, sur certains projet il est demandé d'ajouter un message expliquant pourquoi vous avez verrouillé ces fichiers. Si vous n'utilisez pas de message de verrouillage, vous pouvez décocher la case afin de passer cette fenêtre et de verrouiller les fichiers immédiatement. Si vous utilisez la commande verrouiller sur un dossier, une fenêtre s'ouvrira vous permettant de sélectionner d'autres fichiers à verrouiller. If your project is using the tsvn:lockmsgminsize property, you will see the lock dialog regardless of this setting because the project requires lock messages. 4.30.1.4. Configuration des couleurs de TortoiseSVN Figure 4.55. La boîte de dialogue Configuration, page Couleurs Cette boîte de dialogue vous permet de configurer les couleurs de texte utilisées dans les boîtes de dialogue de TortoiseSVN de la façon que vous préferez. Guide d'utilisation quotidienne 143 Conflit possible ou réel / bloquant Un conflit s'est produit pendant la mise à jour, ou peut arriver pendant une fusion. La mise à jour est entravée par un fichier/dossier non versionné existant du même nom qu'un fichier versionné. Cette couleur est aussi utilisée pour des messages d'erreur dans les boîtes de dialogues de progression. Fichiers ajoutés Éléments ajoutés au référentiel. Manquant / supprimé / remplacé Éléments supprimés du référentiel, manquants de la copie de travail, ou supprimés de la copie de travail et remplacés par d'autres fichiers du même nom. Fusionné Changements du référentiel fusionnés avec succès dans la CdT sans créer de conflits. Modifié / copié Ajoutés avec l'historique, ou chemins copiés dans le référentiel. Aussi utilisé dans la boîte de dialogue de journal pour les entrées qui incluent des élements copiés. Noeud Supprimé Un élément qui a été supprimé du référentiel. Noeud ajouté Un élément ajouté au référentiel, par un ajout, une copie ou un déplacement. Noeud renommé Un élément qui a été renommé dans le référentiel. Noeud remplacé L'élément original a été supprimé et un nouvel élément avec le même nom le remplace. 4.30.2. Options du Graphe des Révisions Figure 4.56. The Settings Dialog, Revision Graph Page Guide d'utilisation quotidienne 144 Filtres de classification The revision graph attempts to show a clearer picture of your repository structure by distinguishing between trunk, branches and tags. As there is no such classification built into Subversion, this information is extracted from the path names. The default settings assume that you use the conventional English names as suggested in the Subversion documentation, but of course your usage may vary. Specify the patterns used to recognise these paths in the three boxes provided. The patterns will be matched case-insensitively, but you must specify them in lower case. Wild cards * and ? will work as usual, and you can use ; to separate multiple patterns. Do not include any extra white space as it will be included in the matching specification. Modifier les Couleurs Colors are used in the revision graph to indicate the node type, i.e. whether a node is added, deleted, renamed. In order to help pick out node classifications, you can allow the revision graph to blend colors to give an indication of both node type and classification. If the box is checked, blending is used. If the box is unchecked, color is used to indicate node type only. Use the color selection dialog to allocate the specific colors used. 4.30.2.1. Couleurs du Graphes de Révision Figure 4.57. The Settings Dialog, Revision Graph Colors Page This page allows you to configure the colors used. Note that the color specified here is the solid color. Most nodes are colored using a blend of the node type color, the background color and optionally the classification color. Noeud Supprimé Eléments ayant été supprimés et non copiés ailleurs dans la même révision. Noeud Ajouté Elements ajoutés récemment, ou copiés (ajout avec l'historique). Noeud Renommé Eléments supprimés d'un endroit et ajoutés ailleurs dans une même révision. Guide d'utilisation quotidienne 145 Noeud Modifié Modification simple sans ajout ni suppression. Noeud inchangé May be used to show the revision used as the source of a copy, even when no change (to the item being graphed) took place in that revision. Noeud de tête Révision de tête courante dans le référentiel Noeud de la CdT If you opt to show an extra node for your modified working copy, attached to its last-commit revision on the graph, use this color. WC Node Border If you opt to show whether the working copy is modified, use this color border on the WC node when modifications are found. Noeud tag Nodes classified as tags may be blended with this color. Noeud racine Nodes classified as trunk may be blended with this color. Marqueurs de Tags Fermés If you use tag folding to save space, tags are marked on the copy source using a block in this color. Marqueurs du Noeud Sélectionné When you left click on a node to select it, the marker used to indicate selection is a block in this color. Stripes These colors are used when the graph is split into sub-trees and the background is colored in alternating stripes to help pick out the separate trees. 4.30.3. Configuration du recouvrement d'icônes Figure 4.58. La Boîte de Dialogue Configuration, Page des Icônes de Recouvrement Guide d'utilisation quotidienne 146 Cette page vous permet de choisir à quels éléments TortoiseSVN doit associer des icônes de recouvrement By default, overlay icons and context menus will appear in all open/save dialogs as well as in Windows Explorer. If you want them to appear only in Windows Explorer, check the Show overlays and context menu only in explorer box. Ignored items and Unversioned items are not usually given an overlay. If you want to show an overlay in these cases, just check the boxes. You can also choose to mark folders as modified if they contain unversioned items. This could be useful for reminding you that you have created new files which are not yet versioned. This option is only available when you use the default status cache option (see below). Since it takes quite a while to fetch the status of a working copy, TortoiseSVN uses a cache to store the status so the explorer doesn't get hogged too much when showing the overlays. You can choose which type of cache TortoiseSVN should use according to your system and working copy size here: Défaut Caches all status information in a separate process (TSVNCache.exe). That process watches all drives for changes and fetches the status again if files inside a working copy get modified. The process runs with the least possible priority so other programs don't get hogged because of it. That also means that the status information is not real time but it can take a few seconds for the overlays to change. Advantage: the overlays show the status recursively, i.e. if a file deep inside a working copy is modified, all folders up to the working copy root will also show the modified overlay. And since the process can send notifications to the shell, the overlays on the left tree view usually change too. Inconvénient : le processus fonctionne constamment, même si vous ne travaillez pas sur vos projets. Il utilise aussi environ 10-50 Mo de RAM selon le nombre et la taille de vos copies de travail. Shell La mise en cache est faite directement à l'intérieur de la dll d'extension du shell, mais seulement pour le dossier actuellement visible. Chaque fois vous naviguez à un autre dossier, l'information de statut est parcourue de nouveau. Avantage : a seulement besoin de très peu de mémoire (autour de 1 MO de RAM) et peut montrer le statut en temps réel. Inconvénient : puisque un seul dossier est mis en cache, les recouvrements ne montrent pas le statut récursivement. Pour de grandes copies de travail, cela peut prendre plus de temps pour montrer un dossier dans l'explorateur qu'avec le cache par défaut. Aussi la colonne de type mime n'est pas disponible. Aucun Avec ce réglage, TortoiseSVN ne va pas du tout chercher le statut dans l'Explorateur. De ce fait, les fichiers n'ont pas de recouvrement et les dossiers ont seulement un recouvrement 'normal' s'ils sont versionnés. Aucun autre recouvrement n'est affiché et aucune colonne supplémentaire n'est disponible non plus. Avantage : n'utilise absolument aucune mémoire supplémentaire et ne ralentit pas du tout l'Explorateur en parcourant. Disadvantage: Status information of files and folders is not shown in Explorer. To see if your working copies are modified, you have to use the « Check for modifications » dialog. The next group allows you to select which classes of storage should show overlays. By default, only hard drives are selected. You can even disable all icon overlays, but where's the fun in that? Network drives can be very slow, so by default icons are not shown for working copies located on network shares. Guide d'utilisation quotidienne 147 Les disques USB Flash semblent être un cas particulier en cela que le type de disque est identifié par le périphérique lui-même. Certains apparaissent comme des disques fixes et d'autres comme des disques amovibles. Les Chemins exclus sont utilisés pour indiquer à TortoiseSVN que ces chemins ne devraient pas montrer les recouvrements d'icône et les colonnes de statut. Cela est utile si vous avez de très grandes copies de travail contenant seulement des bibliothèques que vous ne changerez pas du tout et donc pour lesquelles vous n'aurez pas besoin des recouvrements. Par exemple : f:\dévelopement\SVN\Subversion désactivera les recouvrements seulement sur ce dossier spécifique. Vous pouvez toujours voir les recouvrements sur tous les fichiers et tous les dossiers à l'intérieur de ce dossier. f:\development\SVN\Subversion* désactivera les recouvrements sur tous les fichiers et dossiers dont le chemin commence par f:\development\SVN\Subversion. Cela signifie que vous ne verrez pas de recouvrement pour aucun des fichiers et des dossiers en-dessous de ce chemin. La même chose s'applique aux Chemins inclus. Sauf que pour ces chemins, les recouvrements s'affichent même s'ils sont désactivés pour ce type de disque spécifique, ou par un chemin exclus indiqué au-dessus. Users sometimes ask how these three settings interact, and the definitive answer is: if (path is in include list) show overlays if (path is allowed drive type) AND (path is not in exclude list) show overlays The include list always makes the overlays show. Otherwise, overlays are shown for all marked drive types unless the path is excluded. TSVNCache.exe utilise aussi ces chemins pour limiter son balayage. Si vous voulez qu'il ne regarde que dans des dossiers particuliers, désactivez tous les types de disque et incluez seulement les dossiers que vous voulez spécifiquement être parcourus. Exclure les Lecteurs SUBST It is often convenient to use a SUBST drive to access your working copies, e.g. using the command subst T: C:\TortoiseSVN\trunk\doc However this can cause the overlays not to update, as TSVNCache will only receive one notification when a file changes, and that is normally for the original path. This means that your overlays on the subst path may never be updated. An easy way to work around this is to exclude the original path from showing overlays, so that the overlays show up on the subst path instead. Sometimes you will exclude areas that contain working copies, which saves TSVNCache from scanning and monitoring for changes, but you still want a visual indication that such folders are versioned. The Show excluded folders as 'normal' checkbox allows you to do this. With this option, versioned folders in any excluded area (drive type not checked, or specifically excluded) will show up as normal and up- to-date, with a green check mark. This reminds you that you are looking at a working copy, even though the folder overlays may not be correct. Files do not get an overlay at all. Note that the context menus still work, even though the overlays are not shown. Guide d'utilisation quotidienne 148 As a special exception to this, drives A: and B: are never considered for the Show excluded folders as 'normal' option. This is because Windows is forced to look on the drive, which can result in a delay of several seconds when starting Explorer, even if your PC does have a floppy drive. 4.30.3.1. Sélection du jeu d'icônes Figure 4.59. La boîte de dialogue Configuration, page Ensemble d'icônes Vous pouvez changer le jeu d'icônes de recouvrement pour celui que vous aimez le plus. Notez que si vous changez le jeu de recouvrement, vous devriez redémarrer votre ordinateur pour que les changements prennent effet. 4.30.4. Configuration du réseau Guide d'utilisation quotidienne 149 Figure 4.60. La boîte de dialogue Configuration, page Réseau Vous pouvez ici configurer votre serveur proxy, si vous en avez besoin pour passer le pare-feu de votre société. If you need to set up per-repository proxy settings, you will need to use the Subversion servers file to configure this. Use Edit to get there directly. Consult the Runtime Configuration Area [http://svnbook.red- bean.com/en/1.5/svn.advanced.confarea.html] for details on how to use this file. Vous pouvez aussi spécifier quel programme TortoiseSVN devrait utiliser pour établir une connexion sécurisée à un référentiel svn+ssh. Nous vous recommandons d'utiliser TortoisePlink.exe. C'est une version du programme populaire Plink et elle est incluse avec TortoiseSVN, mais elle est compilée comme une application sans fenêtre, donc vous n'obtenez pas de boîte DOS surgissant chaque fois vous vous authentifiez. You must specify the full path to the executable. For TortoisePlink.exe this is the standard TortoiseSVN bin directory. Use the Browse button to help locate it. Note that if the path contains spaces, you must enclose it in quotes, e.g. "C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe" Un effet secondaire de ne pas avoir de fenêtre est qu'il n'y a nulle part où afficher les messages d'erreur, ainsi si l'authentification échoue, vous obtiendrez simplement un message disant quelque chose comme « Impossible d'écrire sur la sortie standard » Pour cette raison, nous vous recommandons de mettre d'abord en place en utilisant Plink standard. Quand tout fonctionne, vous pouvez utiliser TortoisePlink avec exactement les mêmes paramètres. TortoisePlink does not have any documentation of its own because it is just a minor variant of Plink. Find out about command line parameters from the PuTTY website [http://www.chiark.greenend.org.uk/ ~sgtatham/putty/] Pour que le mot de passe ne vous soit pas demandé à chaque fois, vous devriez utiliser un outil de mise en cache des mots de passe comme Pageant. Cet utilitaire est disponible sur le site internet de PuTTY. Guide d'utilisation quotidienne 150 Finally, setting up SSH on server and clients is a non-trivial process which is beyond the scope of this help file. However, you can find a guide in the TortoiseSVN FAQ listed under Subversion/TortoiseSVN SSH How-To [http://tortoisesvn.net/ssh_howto]. 4.30.5. Réglages des programmes externes Figure 4.61. La boîte de dialogue Configuration, page Visualisateur de différence Vous pouvez ici définir vos propres programmes de comparaison/fusion que TortoiseSVN devrait utiliser. Le réglage par défaut utilise TortoiseMerge qui est installé avec TortoiseSVN. Lisez Section 4.10.5, « Outils de différenciation/fusion externes » pour une liste de quelques programmes externes de différenciation/fusion que les gens utilisent avec TortoiseSVN. 4.30.5.1. Visualisateur de différences Un programme de comparaison externe peut être utilisé pour comparer des révisions différentes de fichiers. Le programme externe devra obtenir les noms de fichier depuis la ligne de commande, avec les autres options de ligne de commande. TortoiseSVN utilise des paramètres de substitution préfixés par %. Quand il rencontre l'un d'eux, il substituera la valeur appropriée. L'ordre des paramètres dépendra du programme de comparaison que vous utilisez. %base Le fichier original sans vos changements %bname Le titre de la fenêtre pour le fichier de base %mine Votre propre fichier, avec vos changements %yname Le titre de la fenêtre pour votre fichier Les titres de fenêtre ne sont pas des noms de fichier purs. TortoiseSVN traite cela comme un nom à afficher et crée les noms en conséquence. Si par exemple si vous faites une comparaison entre un fichier Guide d'utilisation quotidienne 151 dans la révision 123 avec un fichier de votre copie de travail, les noms seront nom de fichier : révision 123 et nom de fichier : copie de travail For example, with ExamDiff Pro: C:\Path-To\ExamDiff.exe %base %mine --left_display_name:%bname --right_display_name:%yname or with KDiff3: C:\Path-To\kdiff3.exe %base %mine --L1 %bname --L2 %yname or with WinMerge: C:\Path-To\WinMerge.exe -e -ub -dl %bname -dr %yname %base %mine or with Araxis: C:\Path-To\compare.exe /max /wait /title1:%bname /title2:%yname %base %mine If you use the svn:keywords property to expand keywords, and in particular the revision of a file, then there may be a difference between files which is purely due to the current value of the keyword. Also if you use svn:eol-style = native the BASE file will have pure LF line endings whereas your file will have CR-LF line endings. TortoiseSVN will normally hide these differences automatically by first parsing the BASE file to expand keywords and line endings before doing the diff operation. However, this can take a long time with large files. If Convert files when diffing against BASE is unchecked then TortoiseSVN will skip pre-processing the files. Vous pouvez aussi indiquer un autre outil de diff pour les propriétés Subversion. Dans la mesure où ce sont de courtes chaines de caractères, il est légitime de vouloir une visionneuse plus compacte. If you have configured an alternate diff tool, you can access TortoiseMerge and the third party tool from the context menus. Context menu ? Diff uses the primary diff tool, and Shift+ Context menu ? Diff uses the secondary diff tool. 4.30.5.2. Outil de fusion Un programme de fusion externe utilisé pour résoudre les fichiers en conflit. La substitution de paramètre est utilisée de la même manière qu'avec le programme de comparaison. %base le fichier original sans vos changements ou ceux des autres %bname Le titre de la fenêtre pour le fichier de base %mine votre propre fichier, avec vos changements %yname Le titre de la fenêtre pour votre fichier %theirs le fichier tel qu'il est dans le référentiel Guide d'utilisation quotidienne 152 %tname Le titre de la fenêtre pour le fichier dans le référentiel %merged le fichier en conflit, le résultat de l'opération de fusion %mname Le titre de la fenêtre pour le fichier fusionné Par exemple, avec Perforce Merge: C:\Chemin-De\P4Merge.exe %base %theirs %mine %merged ou avec KDiff3: C:\Chemin-De\kdiff3.exe %base %mine %theirs -o %merged --L1 %bname --L2 %yname --L3 %tname ou avec Araxis: C:\Chemin-De\compare.exe /max /wait /3 /title1:%tname /title2:%bname /title3:%yname %theirs %base %mine %merged /a2 ou avec WinMerge (2.8 or later): C:\Chemin-De\WinMerge.exe %merged 4.30.5.3. Réglages avancés de comparaison/fusion Figure 4.62. La boîte de dialogue Configuration, Boîte de dialogue Comparaison/ fusion avancée Guide d'utilisation quotidienne 153 In the advanced settings, you can define a different diff and merge program for every file extension. For instance you could associate Photoshop as the « Diff » Program for .jpg files :-) You can also associate the svn:mime-type property with a diff or merge program. To associate using a file extension, you need to specify the extension. Use .bmp to describe Windows bitmap files. To associate using the svn:mime-type property, specify the mime type, including a slash, for example text/xml. 4.30.5.4. Visualisateur de différences unifiées Un programme de visualisation pour les fichiers de différences unifiées (fichiers patch). Aucun paramètre n'est exigé. L'option Défaut consiste à vérifier l'association des fichier pour les fichiers .diff, et ensuite pour les fichiers .txt. Si vous n'avez pas de visualisateur pour les fichiers .diff, vous arriverez très probablement sur le Bloc-notes. Le programme Bloc-notes original de Windows ne se comporte pas bien sur les fichiers qui n'ont pas de fins de ligne standards CR-LF . Puisque la plupart des fichiers de différences unifiées ont des fins de ligne LF pures, ils n'apparaissent pas bien dans le Bloc-notes. Cependant, vous pouvez télécharger un remplaçant du Bloc-notes gratuit Notepad2 [http://www.flos-freeware.ch/notepad2.html] qui montre non seulement les fins de ligne correctement, mais aussi met en couleurs les lignes ajoutées et supprimées. 4.30.6. Configuration des données sauvegardées Figure 4.63. La boîte de dialogue Configuration, Page Données sauvegardées Pour votre convenance, TortoiseSVN enregistre les réglages que vous utilisez et se souvient où vous avez été récemment. Si vous voulez nettoyer ce cache de données, vous pouvez le faire ici. Historique des URL Chaque fois que vous extrayez une copie de travail, fusionnez des changements ou utilisez l'explorateur de référentiel, TortoiseSVN tient un rapport des URLS récemment utilisées et les propose dans une boîte déroulante. Cette liste est parfois encombrée par des URLs périmées donc il est utile de la nettoyer périodiquement. If you want to remove a single item from one of the combo boxes you can do that in-place. Just click on the arrow to drop the combo box down, move the mouse over the item you want to remove and type Shift+Del. Guide d'utilisation quotidienne 154 Messages de log (fenêtre d'édition) TortoiseSVN stocke les commentaires récents de livraison que vous saisissez. Ceux-ci sont stockés par référentiel, donc si vous avez accès à beaucoup de référentiels, cette liste peut devenir assez longue. Messages de log (Montrer la fenêtre de log) TortoiseSVN caches log messages fetched by the Show Log dialog to save time when you next show the log. If someone else edits a log message and you already have that message cached, you will not see the change until you clear the cache. Log message caching is enabled on the Log Cache tab. Tailles et positions des boîtes de dialogue Plusieurs boîtes de dialogue se souviennent de la taille et de la position de l'écran utilisées en dernier. Données d'authentification Quand vous vous authentifiez avec un serveur Subversion, le nom de l'utilisateur et le mot de passe sont mis en cache localement pour que vous n'ayez pas à les entrer à nouveau. Vous pouvez vouloir effacer cela pour des raisons de sécurité ou parce que voulez accédez au référentiel sous un autre nom d'utilisateur ... est-ce que John sait que vous utilisez son PC ? If you want to clear authentication data for one particular server only, read Section 4.1.5, « Authentification » for instructions on how to find the cached data. Log des Actions TortoiseSVN keeps a log of everything written to its progress dialogs. This can be useful when, for example, you want to check what happened in a recent update command. The log file is limited in length and when it grows too big the oldest content is discarded. By default 4000 lines are kept, but you can customize that number. Depuis cet endroit vous pouvez vois le contenu du fichier de commentaires, ainsi que le vider. 4.30.7. Mise en Cache des messages de log Figure 4.64. La boîte de dialogue de Configuration, Page de Mise en Cache des Logs Guide d'utilisation quotidienne 155 This dialog allows you to configure the log caching feature of TortoiseSVN, which retains a local copy of log messages and changed paths to avoid time-consuming downloads from the server. Using the log cache can dramatically speed up the log dialog and the revision graph. Another useful feature is that the log messages can still be accessed when offline. Activer la mise en cache des messages de log Enables log caching whenever log data is requested. If checked, data will be retrieved from the cache when available, and any messages not in the cache will be retrieved from the server and added to the cache. If caching is disabled, data will always be retrieved directly from the server and not stored locally. Permettre les URLs ambigues Occasionally you may have to connect to a server which uses the same URL for all repositories. Older versions of svnbridge would do this. If you need to access such repositories you will have to check this option. If you don't, leave it unchecked to improve performance. Permettre les UUIDs ambigus Some hosting services give all their repositories the same UUID. You may even have done this yourself by copying a repository folder to create a new one. For all sorts of reasons this is a bad idea - a UUID should be unique. However, the log cache will still work in this situation if you check this box. If you don't need it, leave it unchecked to improve performance. Si le référentiel n'est pas disponible If you are working offline, or if the repository server is down, the log cache can still be used to supply log messages already held in the cache. Of course the cache may not be up-to-date, so there are options to allow you to select whether this feature should be used. When log data is being taken from the cache without contacting the server, the dialog using those message will show the offline state in its title bar. Temps d'attente maximum écoulé avant la mise à jour de la révision de tête (HEAD). When you invoke the log dialog you will normally want to contact the server to check for any newer log messages. If the timeout set here is non-zero then the server will only be contacted when the timeout has elapsed since the last time contact. This can reduce server round-trips if you open the log dialog frequently and the server is slow, but the data shown may not be completely up-to-date. If you want to use this feature we suggest using a value of 300 (5 minutes) as a compromise. Nombre de jours d'inactivité avant que les petits caches soient supprimés If you browse around a lot of repositories you will accumulate a lot of log caches. If you're not actively using them, the cache will not grow very big, so TortoiseSVN purges them after a set time by default. Use this item to control cache purging. Maximum size of removed inactive caches Larger caches are more expensive to reacquire, so TortoiseSVN only purges small caches. Fine tune the threshold with this value. Nombre maximum d'échecs de l'outil avant suppression du cache Occasionally something goes wrong with the caching and causes a crash. If this happens the cache is normally deleted automatically to prevent a recurrence of the problem. If you use the less stable nightly build you may opt to keep the cache anyway. 4.30.7.1. Référentiels mis en mémoire cache On this page you can see a list of the repositories that are cached locally, and the space used for the cache. If you select one of the repositories you can then use the buttons underneath. Click on the Update to completely refresh the cache and fill in any holes. For a large repository this could be very time consuming, but useful if you are about to go offline and want the best available cache. Guide d'utilisation quotidienne 156 Click on the Export button to export the entire cache as a set of CSV files. This could be useful if you want to process the log data using an external program, although it is mainly useful to the developers. Click on Delete to remove all cached data for the selected repositories. This does not disable caching for the repository so the next time you request log data, a new cache will be created. 4.30.7.2. Statistiques d'Utilisation du Cache Figure 4.65. La Fenêtre de propriétés, Statistiques d'Utilisation de la Mémoire Cache Cliquer sur le bouton Détails pour voir les statistiques détaillées d'une mémoire cache particulière. Beaucoup des champs montrés là ont surtout un intérêt pour les développeur de TortoiseSVN, ils ne sont donc pas tous expliqués en détail. RAM La quantité de mémoire servant à ce cache Disque The amount of disk space used for the cache. Data is compressed, so disk usage is generally fairly modest. Connexion Montre si le référentiel était disponible la dernière fois que le cache a été utilisé. Dernière Mise à Jour La dernière fois que le contenu de la mémoire cache a changé. Guide d'utilisation quotidienne 157 Dernière mise à jour de la version de tête La dernière fois que la révision HEAD a été demandée au serveur. Auteurs Le nombre d'auteurs différents ayant enregistré des messages dans le cache. Chemins Le nombre de chemins listés, comme vous pourriez le voir avec svn log -v. Ignorer des plages de révisions The number of revision ranges which we have not fetched, simply because they haven't been requested. This is a measure of the number of holes in the cache. Révision La plus Elevée Le numéro de version le plus élevé étant enregistré dans le cache. Compteur de Révision Le nombre de révisions stockées en mémoire cache. C'est un autre système de mesure de la mémoire cache. 4.30.8. Scripts hook côté client Figure 4.66. La boîte de dialogue Configuration, page Scripts hook This dialog allows you to set up hook scripts which will be executed automatically when certain Subversion actions are performed. As opposed to the hook scripts explained in Section 3.3, « Scripts de hook côté serveur », these scripts are executed locally on the client. One application for such hooks might be to call a program like SubWCRev.exe to update version numbers after a commit, and perhaps to trigger a rebuild. Pour des raisons de sécurité et d'implémentation, les scripts de hook sont définis localement sur une machine plutôt que dans les propriétés du projet. Vous définissez ce qui se passe, en ne tenant pas compte Guide d'utilisation quotidienne 158 de ce que quelqu'un d'autre pourrait livrer dans le référentiel. Bien sûr vous pouvez toujours choisir d'appeler un script qui est lui même sous contrôle de version. Figure 4.67. La fenêtre de paramétrage, configuration des scripts de hook Pour ajouter un nouveau script hook, cliquez simplement sur Ajouter et saisissez les détails. Il existe actuellement six types de script hook disponibles Start-commit Called before the commit dialog is shown. You might want to use this if the hook modifies a versioned file and affects the list of files that need to be committed and/or commit message. However you should note that because the hook is called at an early stage, the full list of objects selected for commit is not available. Pre-commit Called after the user clicks OK in the commit dialog, and before the actual commit begins. This hook has a list of exactly what will be committed. Post-commit Appellé après la fin de la livraison (qu'elle soit réussie ou non). Start-update Appelé avant que la fenêtre mise à jour-à-la -révision ne soit affichée. Pre-update Appelé avant que la mise à jour Subversion ne commence. Post-update Appelé après la mise à jour (quelle soit réussie ou non) A hook is defined for a particular working copy path. You only need to specify the top level path; if you perform an operation in a sub-folder, TortoiseSVN will automatically search upwards for a matching path. Ensuite vous devez spécifier la ligne de commande à exécuter, en commençant par le chemin du script de hook ou de l'exécutable. Ce peut être un script de batch, un exécutable ou quelqu'autre fichier que le système sache exécuter, par exemple un script perl. The command line includes several parameters which get filled in by TortoiseSVN. The parameters passed depend upon which hook is called. Each hook has its own parameters which are passed in the following order: Start-commit PATHMESSAGEFILECWD Pre-commit PATHDEPTHMESSAGEFILECWD Guide d'utilisation quotidienne 159 Post-commit PATHDEPTHMESSAGEFILEREVISIONERRORCWD Start-update PATHCWD Pre-update PATHDEPTHREVISIONCWD Post-update PATHDEPTHREVISIONERRORCWD La signification de chacun des paramètres est décrite ici : PATH Un chemin d'un fichier temporaire contenant tous les chemins d'où les opérations ont commencé. Il y a un chemin par ligne dans le fichier temporaire. DEPTH Profondeur dans laquelle la livraison/mise à jour est faite. Les valeurs possibles sont : -2 svn_depth_unknown -1 svn_depth_exclude 0 svn_depth_empty 1 svn_depth_files 2 svn_depth_immediates 3 svn_depth_infinity MESSAGEFILE Le chemin d'un fichier contenant les commentaires de livraison. Le fichier est encodé en UTF-8. Après l'exécution réussie d'un script de hook de start-commit, le commentaire est relu, permettant au script de hook de le modifier. REVISION The repository revision to which the update should be done or after a commit completes. ERROR Path to a file containing the error message. If there was no error, the file will be empty. CWD The current working directory with which the script is run. This is set to the common root directory of all affected paths. Note that although we have given these parameters names for convenience, you do not have to refer to those names in the hook settings. All parameters listed for a particular hook are always passed, whether you want them or not ;-) If you want the Subversion operation to hold off until the hook has completed, check Wait for the script to finish. Guide d'utilisation quotidienne 160 Normally you will want to hide ugly DOS boxes when the script runs, so Hide the script while running is checked by default. Sample client hook scripts can be found in the contrib folder in the TortoiseSVN repository [http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk/contrib/hook-scripts]. (Section 3, « TortoiseSVN est gratuit ! » explains how to access the repository). 4.30.8.1. Intégration d'un Bug Tracker TortoiseSVN can use a COM plugin to query issue trackers when in the commit dialog. The use of such plugins is described in Section 4.28.2, « Récupérer des Informations depuis un Traqueur de Bug ». If your system administrator has provided you with a plugin, which you have already installed and registered, this is the place to specify how it integrates with your working copy. Figure 4.68. La Fenêtre de Propriétés, Page d'Intégration d'un Bug Tracker Click on Add... to use the plugin with a particular working copy. Here you can specify the working copy path, choose which plugin to use from a drop down list of all registered issue tracker plugins, and any parameters to pass. The parameters will be specific to the plugin, but might include your user name on the issue tracker so that the plugin can query for issues which are assigned to you. If you want all users to use the same COM plugin for your project, you can specify the plugin also with the properties bugtraq:provideruuid and bugtraq:providerparams. bugtraq:provideruuid This property specifies the COM UUID of the IBugtraqProvider, for example {91974081-2DC7-4FB1-B3BE-0DE1C8D6CE4E}. (this example is the UUID of the Gurtle bugtraq provider [http://code.google.com/p/gurtle/], which is a provider for the Google Code [http:// code.google.com/hosting/] issue tracker). bugtraq:providerparams This property specifies the parameters passed to the IBugtraqProvider. Please check the documentation of your IBugtraqProvider plugin to find out what to specify in these two properties. Guide d'utilisation quotidienne 161 4.30.9. Configuration de TortoiseBlame Figure 4.69. La boîte de dialogue ce configuration, page de bannissement. The settings used by TortoiseBlame are controlled from the main context menu, not directly with TortoiseBlame itself. Couleurs TortoiseBlame can use the background colour to indicate the age of lines in a file. You set the endpoints by specifying the colours for the newest and oldest revisions, and TortoiseBlame uses a linear interpolation between these colours according to the repository revision indicated for each line. Police You can select the font used to display the text, and the point size to use. This applies both to the file content, and to the author and revision information shown in the left pane. Tabulations Définit combien d'espaces utiliser à la place d'une tabulation dans le fichier. 4.30.10. Réglages dans le registre A few infrequently used settings are available only by editing the registry directly. It goes without saying that you should only edit registry values if you know what you are doing. Configuration Vous pouvez spécifier un emplacement différent pour le fichier de configuration Subversion en utilisant l'emplacement du registre HKCU\Software\TortoiseSVN\ConfigDir. Ceci affectera toutes les opérations de TortoiseSVN. Mettre l'icône de la barre des tâche en cache Pour ajouter une icône de notification de cache pour le programme TSVNCache, créez une clé DWORD avec une valeur de 1 à HKCU\Software\TortoiseSVN\CacheTrayIcon. C'est vraiment seulement utile pour les développeurs puisqu'il vous permet de fermer le programme proprement. Guide d'utilisation quotidienne 162 Debug To show the command line parameters passed from the shell extension to TortoiseProc.exe create a DWORD key with a value of 1 at HKCU\Software\TortoiseSVN\Debug. Context Menu Icons This can be useful if you use something other than the windows explorer or if you get problems with the context menu displaying correctly. create a DWORD key with a value of 0 at HKCU\Software \TortoiseSVN\ShowContextMenuIcons if you don't want TortoiseSVN to not show icons for the shell context menu items. Set this value to 1 to show the icons again. Block Overlay Status If you don't want the explorer to update the status overlays while another TortoiseSVN command is running (e.g. Update, Commit, ...) then create a DWORD key with a value of 1 at HKCU\Software \TortoiseSVN\BlockStatus. Update Check URL HKCU\Software\TortoiseSVN\UpdateCheckURL contains the URL from which TortoiseSVN tries to download a text file to find out if there are updates available. You can also set this under HKLM instead of HKCU if you want, but HKCU overwrites the setting in HKLM. This might be useful for company admins who don't want their users to update TortoiseSVN until they approve it. Nom des fichiers sans extension dans la liste de complétion automatique The auto-completion list shown in the commit message editor displays the names of files listed for commit. To also include these names with extensions removed, create a DWORD key with a value of 1 at HKCU\Software\TortoiseSVN\AutocompleteRemovesExtensions. Colonnes de l'explorateur partout The extra columns the TortoiseSVN adds to the details view in Windows Explorer are normally only active in a working copy. If you want those to be accessible everywhere, not just in working copies, create a DWORD key with a value of 1 at HKCU\Software\TortoiseSVN \ColumnsEveryWhere. Séparateur des commentaires de fusion When you merge revisions from another branch, and merge tracking information is available, the log messages from the revisions you merge will be collected to make up a commit log message. A pre-defined string is used to separate the individual log messages of the merged revisions. If you prefer, you can create a SZ key at HKCU\Software\TortoiseSVN\MergeLogSeparator containing a separator string of your choice. Toujours bannir les modifications faites avec TortoiseMerge TortoiseSVN allows you to assign external diff viewer. Most such viewers, however, are not suited for change blaming (Section 4.23.2, « Condamner les différences »), so you might wish to fall back to TortoiseMerge in this case. To do so, create a DWORD key with a value of 1 at HKCU\Software \TortoiseSVN\DiffBlamesWithTortoiseMerge. Mise en valeur de la version courante des répertoires dans la fenêtre de log. The log dialog highlights the current working copy revision when the log is shown for a file. To do the same thing for a folder requires a working copy crawl, which can be a slow operation for large working copies. If you want to enable this feature you must create a DWORD registry key at HKCU\Software\TortoiseSVN\RecursiveLogRev. A value of 0 disables the feature (no highlighting for folders), a value of 1 (default) will fetch the status recursively (find the highest revision in the working copy tree), and a value of 2 will check the revision of the selected folder itself, but will not check any child items. Make checkout fail if an item of the same name exists By default, if you checkout a working copy over an existing unversioned folder structure, as you might do after import, then any existing which differ from the repository content will be left unchanged and marked as modified. When you come to commit, it is your local copy which will then be sent back to the repository. Some people would prefer the checkout to fail if the Guide d'utilisation quotidienne 163 existing content differs, so that if two people add the same file the second person's version does not overwrite the original version by mistake. If you want to force checkouts to fail in this instance you must create a DWORD registry key with value 0 at HKCU\Software\TortoiseSVN \AllowUnversionedObstruction. 4.30.11. Dossiers de travail de Subversion VS.NET 2003 when used with web projects can't handle the .svn folders that Subversion uses to store its internal information. This is not a bug in Subversion. The bug is in VS.NET 2003 and the frontpage extensions it uses. Notez que le bug a été corrigé à partir de VS2005. As of Version 1.3.0 of Subversion and TortoiseSVN, you can set the environment variable SVN_ASP_DOT_NET_HACK. If that variable is set, then Subversion will use _svn folders instead of .svn folders. You must restart your shell for that environment variable to take effect. Normally that means rebooting your PC. To make this easier, you can now do this from the general settings page using a simple checkbox - refer to Section 4.30.1, « Configuration générale ». For more information, and other ways to avoid this problem in the first place, check out the article about this in our FAQ [http://tortoisesvn.net/aspdotnethack]. 4.31. Étape Finale Faites une donation! Bien que TortoiseSVN et TortoiseMerge soient gratuits, vous pouvez supporter les développeurs en envoyant des patches et en jouant un rôle actif dans le développement. Vous pouvez aussi aider à nous réconforter pendant les heures interminables que nous passons devant nos ordinateurs. While working on TortoiseSVN we love to listen to music. And since we spend many hours on the project we need a lot of music. Therefore we have set up some wish-lists with our favourite music CDs and DVDs: http://tortoisesvn.tigris.org/donate.html Please also have a look at the list of people who contributed to the project by sending in patches or translations. 164 Chapitre 5. Le programme SubWCRev SubWCRev est un programme console Windows qui peut être utilisé pour lire le statut d'une copie de travail Subversion et exécuter facultativement la substitution de mots-clé dans un fichier modèle. C'est souvent utilisé comme une partie du processus de génération comme un moyen d'incorporer l'information de la copie de travail dans l'objet que vous générez. Typiquement cela pourrait être utilisé pour inclure le numéro de révision dans une boîte d'« À propos ». 5.1. La ligne de commande SubWCRev SubWCRev lit le statut Subversion de tous les fichiers d'une copie de travail, en excluant par défaut les externes. Il enregistre le plus haut numéro de révision livrée trouvé et la date de cette révision, Il enregistre aussi s'il y a des modifications locales dans la copie de travail, ou des révisions mélangées. Le numéro de révision, la plage de révisions mises à jour et le statut de modification sont affichés sur stdout. SubWCRev.exe est appelé de la ligne de commande ou d'un script et est contrôlé en utilisant les paramètres de ligne de commande. SubWCRev CheminCopieTravail [VersionSrcFichier VersionDstFichier] [-nmdfe] CheminCopieTravail est le chemin de la copie de travail étant vérifiée. Vous pouvez seulement utiliser SubWCRev sur les copies de travail, et pas directement sur le référentiel. Le chemin peut être absolu ou relatif au répertoire de travail courant. Si vous voulez que SubWCRev exécute la substitution de mots-clé, pour que les champs comme la révision du référentiel et l'URL soient sauvegardées dans un fichier texte, vous devez fournir un fichier modèle FichierVersionSrc et un fichier de sortie FichierVersionDst qui contient la version substituée du modèle. Il y a un certain nombre de commutateurs facultatifs qui affectent la façon dont fonctionne SubWCRev. Si vous en utilisez plus d'un, ils doivent être spécifiés comme un groupe simple, par exemple -nm, et non -n -m. Aller sur... Description -n Si ce commutateur est renseigné, SubWCRev se fermera avec ERRORLEVEL 7 si la copie de travail contient des modifications locales. Cela peut être utile pour empêcher une compilation incluant des changements non livrés. -m Si ce commutateur est renseigné, SubWCRev se fermera avec ERRORLEVEL 8 si la copie de travail contient des révisions mélangées. Cela peut être utile pour empêcher la compilation d'une version partiellement mise à jour. -d Si ce commutateur est donné, SubWCRev sortira avec ERRORLEVEL 9 si le fichier de destination existe déjà . -f Si ce commutateur est donné, SubWCRev inclura la dernière révision changée des dossiers. Le comportement par défaut consiste à utiliser seulement les fichiers lors de l'obtenant des numéros de révision. -e Si ce commutateur est donné, SubWCRev examinera les répertoires qui sont inclus avec svn:externals, mais seulement s'ils sont du même référentiel. Le comportement par défaut est d'ignorer les éléments externes. -x Si ce commutateur est donné, SubWCRev renverra les numéro de révision en héxadécimal. -X Si ce commutateur est donné, SubWCRev renverra les numéros de révision en héxadécimal, préfixés de '0X'. Tableau 5.1. Liste des commutateurs de ligne de commande disponibles Le programme SubWCRev 165 5.2. Substitution de mot-clés Si un fichier source et un fichier de destination sont fournis, SubWCRev copie la source à la destination, en exécutant la substitution de mots-clé comme suit : Mot-clé Description $WCREV$ Remplacé par la plus haute révision livrée dans la copie de travail. $WCDATE$ Replaced with the commit date/time of the highest commit revision. By default, international format is used: yyyy-mm-dd hh:mm:ss. Alternatively, you can specify a custom format which will be used with strftime(), for example: $WCDATE=%a %b %d %I:%M:%S %p $. For a list of available formatting characters, look at the Aide en ligne [http://www.cppreference.com/stddate/strftime.html]. $WCNOW$ Replaced with the current system date/time. This can be used to indicate the build time. Time formatting can be used as described for $WCDATE $. $WCRANGE$ Remplacé par la plage de révisions mises à jour dans la copie de travail. Si la copie de travail est dans un état cohérent, ce sera une seule révision. Si la copie de travail contient des révisions mélangées, soit parce qu'elle est périmée, soit à cause d'une mise à jour à la révision délibérée, donc la plage sera affichée dans la forme 100:200 $WCMIXED$ $WCMIXED?VTexte:FTexte$ est remplacé par TText s'il y a des révisions avec des mises à jour mélangées, ou FText sinon. $WCMODS$ $WCMODS?VTexte:FTexte$ est remplacé par TText s'il y a des modifications locales, ou FText sinon. $WCURL$ Remplacé par l'URL du référentiel du chemin de la copie de travail passée à SubWCRev. $WCINSVN$ $WCINSVN?TText:FText$ est remplacé par TText si l'élément est versionné, ou FText sinon. $WCNEEDSLOCK$ $WCNEEDSLOCK?TText:FText$ est remplacé par TText si l'élément à la propriété svn:needs-lock activée, ou FText sinon. $WCISLOCKED$ $WCISLOCKED?TText:FText$ est remplacé par TText si l'élément est verrouillé, ou FText sinon. $WCLOCKDATE$ Replaced with the lock date. Time formatting can be used as described for $WCDATE$. $WCLOCKOWNER$ Remplacer par le nom du propriétaire du verrou $WCLOCKCOMMENT$ Remplacé par le commentaire du verrou Tableau 5.2. Liste des commutateurs de ligne de commande disponibles Astuce Some of these keywords apply to single files rather than to an entire working copy, so it only makes sense to use these when SubWCRev is called to scan a single file. This applies to $WCINSVN$, $WCNEEDSLOCK$, $WCISLOCKED$, $WCLOCKDATE$, $WCLOCKOWNER$ and $WCLOCKCOMMENT$. 5.3. Exemple de mot-clé L'exemple ci-dessous montre comment les mots-clés dans un fichier modèle sont substitués dans le fichier de résultat. Le programme SubWCRev 166 // Fichier de test pour SubWCRev: testfile.tmpl char *Revision = "$WCREV$"; char *Modified = "$WCMODS?Modified:Not modified$"; char *Date = "$WCDATE$"; char *Range = "$WCRANGE$"; char *Mixed = "$WCMIXED?Mixed revision WC:Not mixed$"; char *URL = "$WCURL$"; #if $WCMODS?1:0$ #error Source is modified #endif // Fin du fichier Après l'exécution de SubWCRev.exe path\to\workingcopy testfile.tmpl testfile.txt, le fichier de sortie testfile.txt doit être de la forme : // Fichier de test pour SubWCRev: testfile.txt char *Revision = "3701"; char *Modified = "Modified"; char *Date = "2005/06/15 11:15:12"; char *Range = "3699:3701"; char *Mixed = "Mixed revision WC"; char *URL = "http://nom.de.domaine.du.projet.org/svn/trunk/src"; #if 1 #error Source is modified #endif // End of file Astuce A file like this will be included in the build so you would expect it to be versioned. Be sure to version the template file, not the generated file, otherwise each time you regenerate the version file you need to commit the change, which in turn means the version file needs to be updated. 5.4. Interface COM Si vous avec besoin d'accéder à l'information sur les révisions depuis d'autres programmes que Subversion, vous pouvez utiliser l'objet COM SubWCRev comme interface. L'objet à créer est SubWCRev.object, et les méthodes suivantes sont supportées : Méthode Description .GetWCInfo This method traverses the working copy gathering the revision information. Naturally you must call this before you can access the information using the remaining methods. The first parameter is the path. The second parameter should be true if you want to include folder revisions. Equivalent to the -f command line switch. The third parameter should be true if you want to include svn:externals. Equivalent to the -e command line switch. Le programme SubWCRev 167 Méthode Description .Revision Le numéro de version le pus élevé de la copie de travail. Equivalent à $WCREV$ .Date Date/heure de la livraison de la dernière révision. Equivalent à $WCDATE$ .Author L'auteur de la version de livraison la plus élevée, c'est à dire, la dernière personne à avoir fait une livraison. .MinRev Le numéro de version le moins élevé, comme montré dans $WCRANGE $. .MaxRev Le numéro de version le plus élevé, comme montré dans $WCRANGE$. .HasModifications Vrais s'il y a des modifications locales. .Url Remplacé par l'URL du référentiel du chemin de la copie de travail passée à GetWCInfo. Equivalent à $WCURL$. .IsSvnItem Vrai si l'élément est versionné .NeedsLocking Vrai si la propriété svn:needs-lock est activée pour l'élément. .IsLocked Vrai si l'élément est verrouillé .LockCreationDate String representing the date when the lock was created, or an empty string if the item is not locked. .LockOwner String representing the lock owner, or an empty string if the item is not locked. .LockComment Le message renseigné au moment du verrouillage. Tableau 5.3. Les méthodes COM/automation sont supportées Les exemples suivants montrent comment l'interface devrait être utilisée. // testCOM.js - fichier javascript // script de test pour l'objet COM SubWCRev filesystem = new ActiveXObject("Scripting.FileSystemObject"); revObject1 = new ActiveXObject("SubWCRev.object"); revObject2 = new ActiveXObject("SubWCRev.object"); revObject3 = new ActiveXObject("SubWCRev.object"); revObject4 = new ActiveXObject("SubWCRev.object"); revObject1.GetWCInfo( filesystem.GetAbsolutePathName("."), 1, 1); revObject2.GetWCInfo( filesystem.GetAbsolutePathName(".."), 1, 1); revObject3.GetWCInfo( filesystem.GetAbsolutePathName("SubWCRev.cpp"), 1, 1); revObject4.GetWCInfo( filesystem.GetAbsolutePathName("..\\.."), 1, 1); wcInfoString1 = "Revision = " + revObject1.Revision + "\nMin Revision = " + revObject1.MinRev + "\nMax Revision = " + revObject1.MaxRev + "\nDate = " + revObject1.Date + "\nURL = " + revObject1.Url + "\nAuthor = " + revObject1.Author + "\nHasMods = " + Le programme SubWCRev 168 revObject1.HasModifications + "\nIsSvnItem = " + revObject1.IsSvnItem + "\nNeedsLocking = " + revObject1.NeedsLocking + "\nIsLocked = " + revObject1.IsLocked + "\nLockCreationDate = " + revObject1.LockCreationDate + "\nLockOwner = " + revObject1.LockOwner + "\nLockComment = " + revObject1.LockComment; wcInfoString2 = "Revision = " + revObject2.Revision + "\nMin Revision = " + revObject2.MinRev + "\nMax Revision = " + revObject2.MaxRev + "\nDate = " + revObject2.Date + "\nURL = " + revObject2.Url + "\nAuthor = " + revObject2.Author + "\nHasMods = " + revObject2.HasModifications + "\nIsSvnItem = " + revObject2.IsSvnItem + "\nNeedsLocking = " + revObject2.NeedsLocking + "\nIsLocked = " + revObject2.IsLocked + "\nLockCreationDate = " + revObject2.LockCreationDate + "\nLockOwner = " + revObject2.LockOwner + "\nLockComment = " + revObject2.LockComment; wcInfoString3 = "Revision = " + revObject3.Revision + "\nMin Revision = " + revObject3.MinRev + "\nMax Revision = " + revObject3.MaxRev + "\nDate = " + revObject3.Date + "\nURL = " + revObject3.Url + "\nAuthor = " + revObject3.Author + "\nHasMods = " + revObject3.HasModifications + "\nIsSvnItem = " + revObject3.IsSvnItem + "\nNeedsLocking = " + revObject3.NeedsLocking + "\nIsLocked = " + revObject3.IsLocked + "\nLockCreationDate = " + revObject3.LockCreationDate + "\nLockOwner = " + revObject3.LockOwner + "\nLockComment = " + revObject3.LockComment; wcInfoString4 = "Revision = " + revObject4.Revision + "\nMin Revision = " + revObject4.MinRev + "\nMax Revision = " + revObject4.MaxRev + "\nDate = " + revObject4.Date + "\nURL = " + revObject4.Url + "\nAuthor = " + revObject4.Author + "\nHasMods = " + revObject4.HasModifications + "\nIsSvnItem = " + revObject4.IsSvnItem + "\nNeedsLocking = " + revObject4.NeedsLocking + "\nIsLocked = " + revObject4.IsLocked + "\nLockCreationDate = " + revObject4.LockCreationDate + "\nLockOwner = " + revObject4.LockOwner + "\nLockComment = " + revObject4.LockComment; WScript.Echo(wcInfoString1); WScript.Echo(wcInfoString2); WScript.Echo(wcInfoString3); WScript.Echo(wcInfoString4); 169 Annexe A. Foire aux questions (FAQ) Because TortoiseSVN is being developed all the time it is sometimes hard to keep the documentation completely up to date. We maintain an online FAQ [http://tortoisesvn.tigris.org/faq.html] which contains a selection of the questions we are asked the most on the TortoiseSVN mailing lists <dev@tortoisesvn.tigris.org> and <users@tortoisesvn.tigris.org>. We also maintain a project Issue Tracker [http://issues.tortoisesvn.net] which tells you about some of the things we have on our To-Do list, and bugs which have already been fixed. If you think you have found a bug, or want to request a new feature, check here first to see if someone else got there before you. Le meilleur endroit pour poser une question à laquelle vous n'avez pas trouvé de réponse est l'une des listes de diffusion. <users@tortoisesvn.tigris.org> est celle à utiliser pour les questions relatives à TortoiseSVN. Si vous voulez aider au développement de TortoiseSVN, vous devriez alors participer aux débats sur <dev@tortoisesvn.tigris.org>. 170 Annexe B. Comment faire pour... Cette annexe contient les solutions aux problèmes/questions que vous pourriez avoir en utilisant TortoiseSVN. B.1. Déplacer/copier beaucoup de fichiers en une fois Déplacer/copier de simples fichiers peut être fait en utilisant TortoiseSVN ? Renommer.... Mais si vous voulez déplacer/copier beaucoup de fichiers, cette façon est bien trop lente et demande trop de travail. The recommended way is by right-dragging the files to the new location. Simply right-click on the files you want to move/copy without releasing the mouse button. Then drag the files to the new location and release the mouse button. A context menu will appear where you can either choose Context Menu ? SVN Copy versioned files here. or Context Menu ? SVN Move versioned files here. B.2. Forcer les utilisateurs à entrer un commentaire Il y a deux façons d'empêcher les utilisateurs de livrer avec un commentaire vide. L'une est spécifique à TortoiseSVN, l'autre fonctionne pour tous les clients Subversion, mais exige l'accès au serveur directement. B.2.1. Script hook sur le serveur Si vous avez un accès direct au serveur du référentiel, vous pouvez installer un script hook pre-commit qui rejette toutes les livraisons avec des commentaires vides ou trop courts. In the repository folder on the server, there's a sub-folder hooks which contains some example hook scripts you can use. The file pre-commit.tmpl contains a sample script which will reject commits if no log message is supplied, or the message is too short. The file also contains comments on how to install/use this script. Just follow the instructions in that file. Cette méthode est celle recommandée si vos utilisateurs utilisent aussi d'autres clients Subversion que TortoiseSVN. L'inconvénient réside dans le fait que la livraison est rejetée par le serveur et donc les utilisateurs obtiendront un message d'erreur. Le client ne peut pas savoir avant la livraison qu'elle sera rejetée. Si vous voulez que TortoiseSVN ait le bouton OK désactivé jusqu'à ce que le commentaire soit assez long alors veuillez utiliser la méthode décrite ci-dessous. Comment faire pour... 171 B.2.2. Propriétés de projet TortoiseSVN utilise des propriétés pour contrôler certaines de ses fonctionnalités. Une de ces propriétés est la propriété tsvn:minlogsize. Si vous définissez cette propriété sur un dossier, alors TortoiseSVN désactivera le bouton OK dans toutes les boîtes de dialogues de livraison jusqu'à ce que l'utilisateur ait entré un commentaire avec au moins la longueur indiquée dans la propriété. Pour des informations détaillées sur ces propriétés de projet, veuillez vous référer à Section 4.17, « Configuration des projets » B.3. Mettre à jour les fichiers sélectionnés à partir du référentiel Normalement, vous mettez à jour votre copie de travail en utilisant TortoiseSVN ? Mettre à jour. Mais si vous voulez seulement récupérer les nouveaux fichiers qu'un collègue a ajoutés sans fusionner les changements d'autres fichiers dans même temps, vous avez besoin d'une approche différente. Utilisez TortoiseSVN ? Vérifier les modifications. Et cliquez sur Vérifier le référentiel pour voir ce qui a changé dans le référentiel. Sélectionnez les fichiers que vous voulez mettre à jour localement, utilisez ensuite le menu contextuel pour ne mettre à jour que ces fichiers. B.4. Annuler des révisions dans le référentiel B.4.1. Utiliser la boîte de dialogue du journal de révision La façon la plus facile d'annuler les changements d'une seule révision, ou d'une plage de révisions, est d'utiliser la boîte de dialogue du journal de révision. C'est aussi la méthode à utiliser si vous voulez renoncer aux changements récents et faire d'une révision précédente la nouvelle révision HEAD. 1. Sélectionnez le fichier ou le dossier pour lequel vous voulez annuler les changements. Si vous voulez annuler tous les changements, cela devrait être le dossier au niveau supérieur. 2. Sélectionnez TortoiseSVN ? Voir le journal pour afficher une liste des révisions. Vous pouvez avoir à utiliser Afficher tout ou 100 suivants pour afficher les révisions qui vous intéressent. 3. Select the revision you wish to revert. If you want to undo a range of revisions, select the first one and hold the Shift key while selecting the last one. Note that for multiple revisions, the range must be unbroken with no gaps. Right click on the selected revision(s), then select Context Menu ? Revert changes from this revision. 4. Or if you want to make an earlier revision the new HEAD revision, right click on the selected revision, then select Context Menu ? Revert to this revision. This will discard all changes after the selected revision. Vous avez annuler les changements dans votre copie de travail. Vérifiez les résultats, puis livrez les changements. B.4.2. Utiliser la boîte de dialogue fusionner Pour annuler une plus grande plage de révisions, vous pouvez utiliser la boîte de dialogue Fusionner. La méthode précédente utilise la fusion en coulisses ; cette méthode l'utilise explicitement. 1. Dans votre copie de travail, sélectionnez TortoiseSVN ? Fusionner. 2. In the From: field enter the full folder URL of the branch or tag containing the changes you want to revert in your working copy. This should come up as the default URL. Comment faire pour... 172 3. Dans le champ De la révision entrez le numéro de la révision à laquelle vous êtes actuellement. Si vous êtes sûr qu'il n'y a personne d'autre faisant des changements, vous pouvez utiliser la révision HEAD. 4. assurez-vous que la case Utiliser "Depuis :" URL est cochée. 5. In the To Revision field enter the revision number that you want to revert to, namely the one before the first revision to be reverted. 6. Cliquez sur OK pour terminer la fusion. Vous avez annuler les changements dans votre copie de travail. Vérifiez les résultats, puis livrez les changements. B.4.3. Utiliser svndumpfilter Puisque TortoiseSVN ne perd jamais de données, vos révisions « annulées » existent toujours comme révisions intermédiaires dans le référentiel. Seule la révision HEAD a été changée à un état précédent. Si vous voulez faire que les révisions disparaissent complètement de votre référentiel, en effaçant toute trace de leur existence, vous devez utiliser des mesures plus extrêmes. À moins d'avoir une bonne raison pour le faire, ce n'est pas recommandé. Une raison possible serait que quelqu'un a livré un document confidentiel à un référentiel public. The only way to remove data from the repository is to use the Subversion command line tool svnadmin. You can find a description of how this works in the Repository Maintenance [http://svnbook.red- bean.com/en/1.5/svn.reposadmin.maint.html]. B.5. Compare deux révisions d'un fichier ou d'un répertoire If you want to compare two revisions in an item's history, for example revisions 100 and 200 of the same file, just use TortoiseSVN ? Show Log to list the revision history for that file. Pick the two revisions you want to compare then use Context Menu ? Compare Revisions. If you want to compare the same item in two different trees, for example the trunk and a branch, you can use the repository browser to open up both trees, select the file in both places, then use Context Menu ? Compare Revisions. If you want to compare two trees to see what has changed, for example the trunk and a tagged release, you can use TortoiseSVN ? Revision Graph Select the two nodes to compare, then use Context Menu ? Compare HEAD Revisions. This will show a list of changed files, and you can then select individual files to view the changes in detail. You can also export a tree structure containing all the changed files, or simply a list of all changed files. Read Section 4.10.3, « Comparer des répertoires » for more information. Alternatively use Context Menu ? Unified Diff of HEAD Revisions to see a summary of all differences, with minimal context. B.6. Inclure un sous-projet commun Parfois vous voudrez inclure un autre projet dans votre copie de travail, peut-être du code de bibliothèque. Vous ne voulez pas faire un duplicata de ce code dans votre référentiel parce qu'alors vous perdriez la connexion avec le code original (et maintenu). Ou peut-être vous avez plusieurs projets qui partagent le code fondamental. Il y a au moins 3 façons de gérer cela. B.6.1. Utiliser svn:externals Set the svn:externals property for a folder in your project. This property consists of one or more lines; each line has the name of a sub-folder which you want to use as the checkout folder for common Comment faire pour... 173 code, and the repository URL that you want to be checked out there. For full details refer to Section 4.18, « Eléments externes ». Commit the new folder. Now when you update, Subversion will pull a copy of that project from its repository into your working copy. The sub-folders will be created automatically if required. Each time you update your main working copy, you will also receive the latest version of all external projects. Si le projet externe est dans le même référentiel, les changements que vous faites là seront inclus dans la liste de livraisons quand vous livrerez votre projet principal. Si le projet externe est dans un référentiel différent, les changements que vous faites au projet externe seront signalés quand vous livrerez le projet principal, mais vous devez livrer ces changements externes séparément. Of the three methods described, this is the only one which needs no setup on the client side. Once externals are specified in the folder properties, all clients will get populated folders when they update. B.6.2. Utiliser une copie de travail nichée Créez un nouveau dossier dans votre projet pour contenir le code commun, mais ne l'ajoutez pas à Subversion Sélectionnez TortoiseSVN ? Extraire pour le nouveau dossier et extrayez une copie du code commun. Vous avez maintenant une copie de travail séparée emboîtée dans votre copie de travail principale. Les deux copies de travail sont indépendantes. Quand vous livrez des changements au parent, les changements à la CdT emboîtée sont ignorés. De même quand vous mettez à jour le parent, la CdT emboîtée n'est pas mise à jour. B.6.3. Utiliser un emplacement relatif Si vous utilisez le même code fondamental commun dans plusieurs projets et vous ne voulez pas en garder plusieurs copies de travail pour chaque projet qui l'utilise, vous pouvez juste l'extraire à un emplacement séparé qui est lié à tous les autres projets qui l'utilisent. Par exemple : C:\Projets\Proj1 C:\Projets\Proj2 C:\Projets\Proj3 C:\Projets\Commun et faites référence au code commun en utilisant un chemin relatif, par exemple ..\..\Commun \DSPcore. Si vos projets sont dispersés dans des emplacements sans rapport, vous pouvez utiliser une variante, qui consiste à mettre le code commun dans un emplacement et utilisez la substitution de lettre de disque pour affecter cet emplacement à quelque chose que vous pouvez coder en dur dans vos projets, par exemple Extrayez le code commun dans D:\Documents\Framework ou C:\Documents and Settings \{login}\My Documents\framework puis utilisez SUBST X: "D:\Documents\framework" pour créer l'affectation de disque utilisé dans votre code source. Votre code peut alors utiliser des emplacements absolus. #include "X:\superio\superio.h" Cette méthode ne fonctionnera que dans un environnement tout PC et vous devrez documenter les affectations de disque requises pour que votre équipe sache où se trouvent ces fichiers mystérieux. Comment faire pour... 174 Cette méthode est strictement utilisée dans des environnements de développement fermés et n'est pas recommandée pour une utilisation générale. B.7. Créer un raccourci vers un référentiel If you frequently need to open the repository browser at a particular location, you can create a desktop shortcut using the automation interface to TortoiseProc. Just create a new shortcut and set the target to: TortoiseProc.exe /command:repobrowser /path:"url/to/repository" Of course you need to include the real repository URL. B.8. Ignorer les fichiers déjà versionnés Si vous avez accidentellement ajouté des fichiers qui devraient avoir été ignorés, comment les retirez- vous du contrôle de version sans les perdre ? Peut-être que vous avez votre propre fichier de configuration d'IDE qui ne fait pas partie du projet, mais qui vous a pris beaucoup de temps à configurer juste comme vous l'aimez. Si vous n'avez pas encore livré l'ajout, tout que vous avez alors à faire est d'utiliser TortoiseSVN ? Revenir en arrière... pour annuler l'ajout. Vous devriez alors ajouter les fichiers à la liste des ignorés pour qu'ils ne soient plus ajoutés plus tard par erreur à nouveau. Si les fichiers sont déjà dans le référentiel, vous devez faire un peu plus de travail. 1. Gardez la touche Shift appuyée pour afficher le menu contextuel étendu et utilisez TortoiseSVN ? Supprimer (garder en local) pour marquer le fichier/répertoire comme étant destiné à être supprimé du référentiel sans perdre la copie locale. 2. TortoiseSVN ? Livraison le répertoire parent. 3. Ajoutez le fichier/dossier à la liste des ignorés pour que vous n'ayez plus le problème. B.9. Retirer une copie de travail du contrôle de version Si vous souhaitez retirer tous les répertoires .svn de votre version de travail vous pouvez tout simplement utiliser la commande export. Lisez Section 4.26.1, « Retirer une copie de travail du contrôle de version » pour plus d'informations sur cette commande. B.10. Retirer une copie de travail If you have a working copy which you no longer need, how do you get rid of it cleanly? Easy - just delete it in Windows Explorer! Working copies are private local entities, and they are self-contained. 175 Annexe C. Trucs Utiles Pour Les Administrateurs Cette annexe contient les solutions aux problèmes/questions que vous pourriez avoir quand vous êtes responsable du déploiement de TortoiseSVN sur plusieurs ordinateurs client. C.1. Déployer TortoiseSVN via les stratégies de groupe L'installeur TortoiseSVN est un fichier msi, ce qui signifie que vous ne devriez avoir aucun problème pour ajouter ce fichier msi à la stratégie de groupe de votre contrôleur de domaine. A good walk-through on how to do that can be found in the knowledge base article 314934 from Microsoft: http://support.microsoft.com/?kbid=314934. Versions 1.3.0 and later of TortoiseSVN must be installed under Computer Configuration and not under User Configuration. This is because those versions need the new CRT and MFC DLLs, which can only be deployed per computer and not per user. If you really must install TortoiseSVN on a per user basis, then you must first install the MFC and CRT package version 8 from Microsoft on each computer you want to install TortoiseSVN as per user. C.2. Rediriger la vérification de mise à niveau TortoiseSVN vérifie s'il y a une nouvelle version disponible tous les deux ou trois jours. S'il y a une version plus récente disponible, une boîte de dialogue s'affiche pour en informer l'utilisateur. Figure C.1. La boîte de dialogue Mettre à jour Si vous êtes responsable de beaucoup d'utilisateurs dans votre domaine, vous pourriez vouloir que vos utilisateurs n'utilisent que les versions que vous avez approuvées et qu'ils n'installent pas toujours la dernière version. Vous ne voulez pas probablement pas que la boîte de dialogue de mise à niveau s'affiche pour que vos utilisateurs n'aillent pas mettre à niveau immédiatement. Versions 1.4.0 and later of TortoiseSVN allow you to redirect that upgrade check to your intranet server. You can set the registry key HKCU\Software\TortoiseSVN\UpdateCheckURL (string value) to an URL pointing to a text file in your intranet. That text file must have the following format: Trucs Utiles Pour Les Administrateurs 176 1.4.1.6000 A new version of TortoiseSVN is available for you to download! http://192.168.2.1/downloads/TortoiseSVN-1.4.1.6000-svn-1.4.0.msi The first line in that file is the version string. You must make sure that it matches the exact version string of the TortoiseSVN installation package. The second line is a custom text, shown in the upgrade dialog. You can write there whatever you want. Just note that the space in the upgrade dialog is limited. Too long messages will get truncated! The third line is the URL to the new installation package. This URL is opened when the user clicks on the custom message label in the upgrade dialog. You can also just point the user to a web page instead of the MSI file directly. The URL is opened with the default web browser, so if you specify a web page, that page is opened and shown to the user. If you specify the MSI package, the browser will ask the user to save the MSI file locally. C.3. Mettre la variable d'environnement SVN_ASP_DOT_NET_HACK As of version 1.4.0 and later, the TortoiseSVN installer doesn't provide the user with the option to set the SVN_ASP_DOT_NET_HACK environment variable anymore, since that caused many problems and confusions with users which always install everything no matter if they know what it is for. But that option is only hidden for the user. You still can force the TortoiseSVN installer to set that environment variable by setting the ASPDOTNETHACK property to TRUE. For example, you can start the installer like this: msiexec /i TortoiseSVN-1.4.0.msi ASPDOTNETHACK=TRUE C.4. Désactiver les entrées du menu contextuel As of version 1.5.0 and later, TortoiseSVN allows you to disable (actually, hide) context menu entries. Since this is a feature which should not be used lightly but only if there is a compelling reason, there is no GUI for this and it has to be done directly in the registry. This can be used to disable certain commands for users who should not use them. But please note that only the context menu entries in the explorer are hidden, and the commands are still available through other means, e.g. the command line or even other dialogs in TortoiseSVN itself! The registry keys which hold the information on which context menus to show are HKEY_CURRENT_USER\Software\TortoiseSVN\ContextMenuEntriesMaskLow and HKEY_CURRENT_USER\Software\TortoiseSVN\ContextMenuEntriesMaskHigh. Each of these registry entries is a DWORD value, with each bit corresponding to a specific menu entry. A set bit means the corresponding menu entry is deactivated. Valeur Entrée du menu 0x0000000000000001 Extraire 0x0000000000000002 Mettre à jour 0x0000000000000004 Livrer 0x0000000000000008 Ajouter 0x0000000000000010 Revenir en arrière 0x0000000000000020 Nettoyer 0x0000000000000040 Résoudre 0x0000000000000080 Aller sur... 0x0000000000000100 Importer Trucs Utiles Pour Les Administrateurs 177 Valeur Entrée du menu 0x0000000000000200 Exporter 0x0000000000000400 Créer un référentiel ici 0x0000000000000800 Branche/Etiquette 0x0000000000001000 Fusionner 0x0000000000002000 Supprimer 0x0000000000004000 Renommer 0x0000000000008000 Mettre à jour à la révision 0x0000000000010000 Voir les différences 0x0000000000020000 Voir le journal 0x0000000000040000 Éditer les conflits 0x0000000000080000 Relocaliser 0x0000000000100000 Vérifier les modifications 0x0000000000200000 Ignorer 0x0000000000400000 Explorateur de référentiel 0x0000000000800000 Condamner 0x0000000001000000 Créer un patch 0x0000000002000000 Appliquer un patch 0x0000000004000000 Graphique de révision 0x0000000008000000 Verrouiller 0x0000000010000000 Relâcher un verrou 0x0000000020000000 Propriétés 0x0000000040000000 Comparer avec l'URL 0x0000000080000000 Supprimer les éléments non versionnés 0x2000000000000000 Réglages 0x4000000000000000 Aide 0x8000000000000000 À propos Tableau C.1. Entrées du menu et leurs valeurs Example: to disable the « Relocate » the « Delete unversioned items » and the « Settings » menu entries, add the values assigned to the entries like this: 0x0000000000080000 + 0x0000000080000000 + 0x2000000000000000 = 0x2000000080080000 The lower DWORD value (0x80080000) must then be stored in HKEY_CURRENT_USER\Software \TortoiseSVN\ContextMenuEntriesMaskLow, the higher DWORD value (0x20000000) in HKEY_CURRENT_USER\Software\TortoiseSVN\ContextMenuEntriesMaskHigh. Pour réactiver les entrées du menu, supprimer simplement les deux clés de registre. 178 Annexe D. Automatiser TortoiseSVN Puisque toutes les commandes pour TortoiseSVN sont contrôlées par des paramètres de ligne de commande, vous pouvez l'automatiser avec des scripts batch ou démarrer des commandes spécifiques et des boîtes de dialogues depuis d'autres programmes (par exemple votre éditeur de texte favori). Important Souvenez-vous que TortoiseSVN est un client GUI et ce guide d'automatisation vous montre comment faire les boîtes de dialogues de TortoiseSVN apparaissent pour collecter les entrées utilisateur. Si vous voulez écrire un script qui n'exige aucune entrée, vous devriez utiliser le client en ligne de commande Subversion officiel à la place. D.1. Commandes de TortoiseSVN Le programme GUI de TortoiseSVN s'appelle TortoiseProc.exe. Toutes les commandes sont spécifiées avec le paramètre /command:abcd où abcd est le nom de la commande requise. La plupart de ces commandes ont besoin d'au moins un argument de chemin, que l'on donne avec /path:"un \chemin". Dans la table suivante, la commande fait référence au paramètre /command:abcd et le chemin se réfère au paramètre /path:"un\chemin". Puisque certaines des commandes peuvent prendre une liste de chemins cibles (par exemple livrer plusieurs fichiers spécifiques) le paramètre /path peut prendre plusieurs chemins, séparés par un caractère *. TortoiseSVN utilise des fichiers temporaires pour passer des arguments multiples entre l'extension du shell et le programme principal. À partir de la version 1.5.0 et supérieures, le paramètre /notempfile est obsolète et il est inutile de l'ajouter désormais. D'habitude, la barre de progression utilisée pour les livraisons, les mises à jour et beaucoup d'autres commandes reste ouverte après que la commande ait fini et jusqu'à ce que l'utilisateur appuie sur le bouton OK. Ce comportement peut être modifié en cochant l'option correspondante dans la boîte de dialogue de configuration. Mais ainsi la barre de progression se fermera à la fin de l'opération, que vous ayez lancé la commande depuis un fichier batch ou depuis le menu contextuel TortoiseSVN. Pour spécifier un emplacement différent du fichier de configuration, utilisez le paramètre / configdir:"chemin\vers\répertoire\de\conf". Cela remplacera le chemin par défaut, y compris tous les paramètres de la base de registre. Pour fermer la boîte de dialogue de progression automatiquement à la fin d'une commande sans utiliser le réglage permanent, vous pouvez lui passer le paramètre /closeonend. ? /closeonend:0 ne ferme pas la boîte de dialogue automatiquement ? /closeonend:1 ferme automatiquement s'il n'y a pas d'erreurs ? /closeonend:2 ferme automatiquement s'il n'y a pas d'erreurs ni de conflits ? /closeonend:2 ferme automatiquement s'il n'y a pas d'erreurs, de conflits ni de fusions ? /closeonend:4 ferme automatiquement s'il n'y a pas d'erreurs, de conflits ni de fusions pour les opérations locales Le tableau ci-dessous liste toutes les commandes qui peuvent être accessibles en utilisant la ligne de commande TortoiseProc.exe. Comme décrit ci-dessus, celles-ci devraient être de la forme / command:abcd. Dans le tableau, le préfixe /command est omis pour économiser de la place. Automatiser TortoiseSVN 179 Commande Description :about Affiche la boîte de dialogue d'À propos. Elle s'affiche aussi si aucune commande n'est fournie. :log Ouvre la boîte de dialogue des messages de log. Le /path spécifie le fichier ou le dossier duquel il faut afficher le journal. Trois options supplémentaires peuvent être définies : /startrev:xxx, /endrev:xxx et /strict :checkout Ouvre la boîte de dialogue d'extraction. Le /path spécifie le répertoire cible et le /url spécifie l'URL à extraire. :import Ouvre la boîte de dialogue d'Importation. Le /path spécifie le répertoire contenant les données à importer. :update Met à jour la copie de travail dans /path vers HEAD. Si l'option /rev est fournie alors une boîte de dialogue est affichée pour demander à l'utilisateur à quelle révision la mise à jour devrait se faire. Pour éviter la boîte de dialogue, spécifiez un numéro de révision /rev:1234. Les autres options sont / nonrecursive et /ignoreexternals. :commit Ouvre la boîte de dialogue de livraison. Le /path spécifie le répertoire cible ou la liste des fichiers à livrer. Vous pouvez aussi spécifier le commutateur /logmsg pour passer un commentaire prédéterminé à la boîte de dialogue de livraision. Ou, si vous ne voulez pas passer le commentaire via la ligne de commande, utilisez /logmsgfile:chemin, où chemin pointe sur un fichier contenant le commentaire. Pour préremplir le champ d'ID de bug (dans le cas où vous avez défini correctement la propriété d'intégration aux traqueurs de bug), vous pouvez utiliser le /bugid: "l'id du bug ici". :add Ajoute les fichiers de /path au contrôle de version. :revert Annule les modifications locales d'une copie de travail. Le /path indique quels éléments annuler. :cleanup Nettoie les opérations interrompues ou annulées et déverrouille la copie de travail dans /path. :resolve Marque un fichier en conflit indiqué dans /path comme résolu. Si / noquestion est donné, alors la résolution est faite sans demander d'abord à l'utilisateur si cela doit être vraiment fait. :repocreate Crée un référentiel dans /path :switch Ouvre la fenêtre Aller sur. Le /path spécifie le répertoire cible. :export Exporte dans un autre répertoire la copie de travail située dans /path. Si le /path pointe vers un répertoire non versionné, une boîte de dialogue demandera une URL à laquelle exporter le dossier dans /path. :merge Ouvre la fenêtre de fusion. Le /path spécifie le répertoire cible. Pour fusionner une plage de révisions, les options disponibles sont les suivantes :/fromurl:URL, /revrange:string. Pour fusionner deux arborescences du référentieln les options sont les suivantes : / fromurl:URL, /tourl:URL, /fromrev:xxx et /torev:xxx. Elles pré-remplissent les champs correspondants dans la fenêtre de fusion. :mergeall Ouvre la fenêtre fusionner tout. Le /path spécifie le répertoire cible. :copy Ouvre la fenêtre des branches/tags. Le /path est la copie de travail de laquelle faire une branche ou un tag. Et le /url est l'URL de destination. Vous pouvez également spécifier le /logmsg pour passer un message prédéfini à la fenêtre des branches/tags. Ou si vous voulez passer le message en ligne de commande, utilisez /logmsgfile:chemin, où chemin pointe sur un fichier contenant le message. Automatiser TortoiseSVN 180 Commande Description :settings Ouvre la boîte de dialogue de configuration. :remove Supprime les fichiers dans /path du contrôle de version. :rename Renomme le fichier dans /path. Le nouveau nom pour le fichier est demandé par une boîte de dialogue. Pour éviter la question concernant le renommage de fichiers similaires en une étape, passez /noquestion. :diff Démarre le programme externe de comparaison indiqué dans la configuration de TortoiseSVN. Le /path spécifie le premier fichier. Si l'option /path2 est activée, alors le programme de comparaison est lancé avec ces deux fichiers. Si /path2 est omit, alors la comparaison est faite entre le fichier dans /path et sa BASE.Pour renseigner explicitement les révisions à comparer, utiliser /startrev:xxx et /endrev:xxx. Si /blame est activé et /path2 non, alors la comparaison est faite en bannissant d'abord les révisions données. :showcompare Depending on the URLs and revisions to compare, this either shows a unified diff (if the option unified is set), a dialog with a list of files that have changed or if the URLs point to files starts the diff viewer for those two files. Les options url1, url2, revision1 et revision2 doivent être précisées. Les options pegrevision, ignoreancestry, blame et unified sont facultatives. :conflicteditor Démarre l'éditeur de conflit indiqué dans la configuration de TortoiseSVN avec les fichiers corrects pour le fichier en conflit dans /path. :relocate Ouvre la boîte de dialogue Relocaliser. Le /path spécifie le chemin de la copie de travail à relocaliser. :help Ouvre le fichier d'aide. :repostatus Ouvre la fenêtre vérifier les modifications. Le /path spécifie le répertoire de la copie de travail. :repobrowser Ouvre la fenêtre de l'explorateur de référentiel, pointant sur l'URL de la copie de travail donnée dans /path ou /path pointe directement sur une URL. Une option supplémentaire /rev:xxx peut être utilisée pour spécifier la révision devant être affichée. Si le /rev:xxx n'est pas renseigné, la version de tête est utilisée par défaut. Si /path pointe sur une URL, le / projectpropertiespath:path/to/wc spécifie le chemin à partir duquel il faut lire et utiliser les propriétés du projet. :ignore Ajoute toutes les cibles dans /path à la liste des éléments ignorés, c'est-à- dire ajoute le svn:ignore à ces fichiers. :blame Ouvre la fenêtre de bannissement pour le fichier spécifier dans /path. Si les options /startrev et /endrev sont précisées, la fenêtre permettant de spécifier la plage de révisions à bannir n'est pas affichée, ces valeurs des révisions sont utilisées à la place. If the option /line:nnn is set, TortoiseBlame will open with the specified line number showing. The options /ignoreeol, /ignorespaces and / ignoreallspaces are also supported. :cat Enregistre un fichier depuis une URL ou depuis un chemin de la copie de travail donné dans /path à l'emplacement donné dans / savepath:chemin. La révision est donnée dans /revision:xxx. Cela peut être utilisé pour obtenir un fichier avec une révision spécifique. Automatiser TortoiseSVN 181 Commande Description :createpatch Crée un patch pour le chemin donné dans /path. :revisiongraph Montre le graphique de révision pour le chemin donné dans /path. :lock Verrouille un ou tous les fichiers dans un répertoire donné dans /path. La boîte de dialogue 'Verrouiller' s'affiche afin de permettre à l'utilisateur d'entrer un commentaire pour le verrou. :unlock Déverrouille un fichier ou tous les fichiers d'un répertoire donné dans / path. :rebuildiconcache Reconstruit le cache d'icône Windows. Utilisez-le seulement dans le cas où les icônes Windows sont corrompues. Un effet secondaire à cela (qui ne peut être évité) est que les icônes sur le bureau sont réarrangées. Pour supprimer la fenêtre d'information, passez /noquestion. :properties Affiche la boîte de dialogue de propriétés pour le chemin donné dans /path. Tableau D.1. Liste des commandes et des options disponibles Exemples (qui devraient être saisis sur une ligne): TortoiseProc.exe /command:commit /path:"c:\svn_ct\fichier1.txt*c:\ /logmsg:"message de log de test" /closeonend TortoiseProc.exe /command:update /path:"c:\svn_ct\" /closeonend TortoiseProc.exe /command:log /path:"c:\svn_ct\fichier1.txt" /startrev:50 /endrev:60 /closeonend D.2. Commandes de TortoiseIDiff The image diff tool has a few command line options which you can use to control how the tool is started. The program is called TortoiseIDiff.exe. Le tableau suivant fait la liste des options pouvant être passées en ligne de commande à l'outil de comparaison d'images. Option Description :left Chemin du fichier affiché à gauche. :lefttitle Une chaine de titre. Cette chaine est utilisée dans le titre de la vue image au lieu du chemin complet du fichier image. :right Chemin du fichier affiché à droite. :righttitle Une chaine de titre. Cette chaine est utilisée dans le titre de la vue image au lieu du chemin complet du fichier image. :overlay If specified, the image diff tool switches to the overlay mode (alpha blend). :fit If specified, the image diff tool fits both images together. :showinfo Affiche la boîte d'informations sur l'image Tableau D.2. Liste des options disponibles Exemple (qui doit tenir sur une seule ligne): Automatiser TortoiseSVN 182 TortoiseIDiff.exe /left:"c:\images\img1.jpg" /lefttitle:"image 1" /right:"c:\images\img2.jpg" /righttitle:"image 2" /fit /overlay 183 Annexe E. Référence croisée de l'interface en ligne de commande Parfois ce manuel se réfère à la documentation principale de Subversion, qui décrit Subversion en termes d'Interface de Ligne de Commande (ILC). Pour vous aider à comprendre ce que fait TortoiseSVN en coulisses, nous avons compilé une liste montrant les commandes ILC équivalentes pour chacune des opérations GUI de TortoiseSVN. Note Bien qu'il y ait des équivalents ILC à ce que fait TortoiseSVN, souvenez-vous que TortoiseSVN ne fait pas appel à l'ILC mais utilise la bibliothèque de Subversion directement. Si vous pensez avoir trouvé un bug dans TortoiseSVN, nous pouvons vous demander d'essayer de le reproduire en utilisant l'ILC, pour que nous puissions distinguer les problèmes de TortoiseSVN des problèmes de Subversion. Cette référence vous dit quelle commande essayer. E.1. Conventions et règles de base Dans les descriptions qui suivent, l'URL d'un référentiel est simplement affichée URL et un exemple pourrait être http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk. Le chemin de la copie de travail est simplement affiché PATH, et un exemple pourrait être C:\TortoiseSVN \trunk. Important Parce que TortoiseSVN est une extension du shell Windows, il n'est pas capable d'utiliser la notion d'un répertoire de travail courant. Tous les chemins de la copie de travail doivent être donnés en utilisant le chemin absolu, pas le chemin relatif. Certains éléments sont facultatifs et ceux-ci sont souvent contrôlés par des cases à cocher ou des boutons radio dans TortoiseSVN. Ces options sont affichées dans des [crochets] dans les définitions de ligne de commande. E.2. Commandes de TortoiseSVN E.2.1. Extraire svn checkout [-N] [--ignore-externals] [-r rev] URL CHEMIN Si Extraire seulement le répertoire de tête est coché, utilisez le commutateur -N. Si Omettre les externes est coché, utilisez le commutateur --ignore-externals. Si vous extrayez une révision spécifique, spécifiez cela après l'URL en utilisant le commutateur -r. E.2.2. Mettre à jour svn info URL_de_la_CdT svn update [-r rev] CHEMIN Référence croisée de l'interface en ligne de commande 184 Mettre à jour plusieurs éléments n'est pas actuellement une opération atomique dans Subversion. Donc TortoiseSVN trouve d'abord la révision HEAD du référentiel et met ensuite à jour tous les éléments à ce numéro de révision particulier pour éviter de créer une copie de travail avec des révisions mélangées. Si un seul élément est sélectionné à mettre à jour ou si les éléments choisis ne sont pas tous du même référentiel, TortoiseSVN met simplement à jour à HEAD. Aucune option de ligne de commande n'est utilisée ici. Mettre à jour à la révision met aussi en oeuvre la commande de mise à jour, mais offre plus d'options. E.2.3. Mettre à jour à la révision svn info URL_de_la_CdT svn update [-r rev] [-N] [--ignore-externals] CHEMIN Si Mettre à jour seulement le répertoire de tête est coché, utilisez le commutateur -N. Si Omettre les externes est coché, utilisez le commutateur --ignore-externals. E.2.4. Livrer Dans TortoiseSVN, la boîte de dialogue livrer utilise plusieurs commandes Subversion. La première étape est une vérification de statut qui détermine les éléments de votre copie de travail qui peuvent potentiellement être livrés. Vous pouvez passer en revue la liste, comparer les fichiers avec la BASE et les éléments que vous voulez inclure dans la livraison. svn status -v CHEMIN Si Afficher les fichiers non versionnés est coché, TortoiseSVN affichera aussi tous les fichiers et tous les dossiers non versionnés dans la hiérarchie de la copie de travail, en prenant en compte les règles d'exclusion. Cette fonctionnalité particulière n'a aucun équivalent direct dans Subversion, puisque la commande svn status ne parcourt pas les dossiers non versionnés. Si vous sélectionnez des fichiers ou des dossiers non versionnés, ces éléments seront d'abord ajoutés à votre copie de travail. svn add CHEMIN... Quand vous cliquez sur OK, la livraison Subversion se produit. Si vous avez laissé toutes les cases de sélection de fichier dans leur état par défaut, TortoiseSVN utilise une seule livraison récursive de la copie de travail. Si vous désélectionnez quelques fichiers, alors une livraison non récursive (-N) doit être utilisée et chaque chemin doit être spécifié individuellement sur la ligne de commande de livraison. svn commit -m "Commentaire" [-N] [--no-unlock] CHEMIN... Commentaire représente ici le contenu de la boîte de saisie du commentaire. Cela peut être vide. Si Garder les verrous est coché, utilisez le commutateur --no-unlock. E.2.5. Voir les différences svn diff CHEMIN Si vous utilisez Voir les différences depuis le menu contextuel principal, vous comparez un fichier modifié avec sa version de BASE. La sortie de la commande de l'ILC ci-dessus fait la même chose et génère Référence croisée de l'interface en ligne de commande 185 une sortie au format unified-diff. Cependant, ce n'est pas ce qu'utilise TortoiseSVN. TortoiseSVN utilise TortoiseMerge (ou le programme de comparaison de votre choix) pour afficher les différences entre des fichiers purement texte, donc il n'y a aucun équivalent dans l'ILC. Vous pouvez aussi comparer 2 fichiers en utilisant TortoiseSVN, qu'ils soient sous contrôle de version ou non. TortoiseSVN alimente simplement les deux fichiers dans le programme de comparaison choisi et laisse rechercher où se trouvent les différences. E.2.6. Voir le journal svn log -v -r 0:N --limit 100 [--stop-on-copy] CHEMIN ou svn log -v -r M:N [--stop-on-copy] CHEMIN Par défaut, TortoiseSVN essaye de récupérer 100 commentaires en utilisant la méthode --limit. Si les réglages indiquent d'utiliser de vieilles API, alors la deuxième forme est utilisée pour aller chercher les commentaires de 100 révisions du référentiel. Si Arrêt à la copie/renommage est coché, utilisez le commutateur --stop-on-copy. E.2.7. Vérifier les modifications svn status -v CHEMIN ou svn status -u -v CHEMIN La vérification initiale du statut ne regarde que votre copie de travail. Si vous cliquez sur Vérifier le référentiel alors le référentiel est aussi vérifié pour voir quels fichiers seraient changés par une mise à jour, ce qui exige le commutateur -u. Si Afficher les fichiers non versionnés est coché, TortoiseSVN affichera aussi tous les fichiers et tous les dossiers non versionnés dans la hiérarchie de la copie de travail, en prenant en compte les règles d'exclusion. Cette fonctionnalité particulière n'a aucun équivalent direct dans Subversion, puisque la commande svn status ne parcourt pas les dossiers non versionnés. E.2.8. Graphique de révision Le graphique de révision est une fonctionnalité de TortoiseSVN uniquement. Il n'y a pas d'équivalent pour le client en ligne de commande. Ce que fait TortoiseSVN est svn info URL_de_la_CdT svn log -v URL où l'URL est la racine du référentiel et analyse ensuite les données renvoyées. E.2.9. Explorateur de référentiel svn info URL_de_la_CdT svn list [-r rev] -v URL Vous pouvez utiliser svn info pour déterminer la racine du référentiel, qui est le niveau supérieur affiché dans l'explorateur de référentiel. Vous ne pouvez pas naviguer vers le haut au-dessus de ce niveau. Aussi, cette commande renvoie toute l'information de verrouillage affichée dans l'explorateur de référentiel. Référence croisée de l'interface en ligne de commande 186 L'appel svn list listera le contenu d'un répertoire, à l'URL et la révision données. E.2.10. Éditer les conflits Cette commande n'a aucun équivalent en ILC. Elle appelle TortoiseMerge ou un outil externe de comparaison/fusion à 3 vues pour regarder les fichiers impliqués dans le conflit et déterminer quelles lignes utiliser. E.2.11. Résolu svn resolved CHEMIN E.2.12. Renommer svn rename CHEMIN_COURANT NOUVEAU_CHEMIN E.2.13. Supprimer svn delete CHEMIN E.2.14. Revenir en arrière svn status -v CHEMIN La première étape est un contrôle de statut qui détermine les éléments de votre copie de travail qui peuvent être potentiellement annulés. Vous pouvez examiner la liste, comparer les fichiers contre la BASE et choisir les éléments que vous voulez inclure dans le retour en arrière. Quand vous cliquez sur OK, le retour en arrière de Subversion se produit. Si vous avez laissé toutes les cases de sélection de fichier dans leur état par défaut, TortoiseSVN utilise un seul retour en arrière récursif (-R) de la copie de travail. Si vous désélectionnez quelques fichiers, alors chaque chemin doit être spécifié individuellement sur la ligne de commande de retour en arrière. svn revert [-R] CHEMIN... E.2.15. Nettoyer svn cleanup CHEMIN E.2.16. Obtenir un verrou svn status -v CHEMIN La première étape est une vérification de statut qui détermine les fichiers de votre copie de travail qui peuvent être potentiellement verrouillés. Vous pouvez choisir les éléments que vous voulez verrouiller. svn lock -m "Commentaire du verrou" [--force] CHEMIN... Commentaire du verrou représente ici le contenu de la boîte de saisie de commentaire de verrou. Il peut être vide. Si Voler les verrous est coché, utilisez le commutateur --force. Référence croisée de l'interface en ligne de commande 187 E.2.17. Relâcher un verrou svn unlock CHEMIN E.2.18. Branche/Etiquette svn copy -m "Commentaire" URL URL ou svn copy -m "Commentaire" URL@rev URL@rev ou svn copy -m "Commentaire" CHEMIN URL La boîte de dialogue de Branche/Étiquette exécute une copie vers le référentiel. Il y a 3 boutons radio d'options : ? Révision HEAD dans le référentiel ? Révision spécifique dans le référentiel ? Copie de travail qui correspondent aux 3 variantes de ligne de commande ci-dessus. Commentaire représente ici le contenu de la boîte de saisie du commentaire. Cela peut être vide. E.2.19. Aller sur... svn info URL_de_la_CdT svn switch [-r rev] URL CHEMIN E.2.20. Fusionner svn merge [--dry-run] URL_Depuis@revN URL_Vers@revM CHEMIN The Test Merge performs the same merge with the --dry-run switch. svn diff URL_Depuis@revN URL_Vers@revM Le Diff unifiée affiche l'opération de comparaison qui sera utilisée pour faire la fusion. E.2.21. Exporter svn export [-r rev] [--ignore-externals] URL CHEMIN_Export Cette forme est utilisée lors d'un accès depuis un dossier non versionné et le dossier est utilisé comme destination. L'exportation d'une copie de travail dans un emplacement différent est fait sans utiliser la bibliothèque de Subversion, donc il n'existe aucun équivalent en ligne de commande correspondant. Ce que fait TortoiseSVN est une copie de tous les fichiers vers le nouvel emplacement lors de l'affichage de la progression de l'opération. Les fichiers/dossiers non versionnés peuvent être aussi exportés facultativement . Dans les deux cas, si Omettre les externes est coché, utilisez le commutateur --ignore- externals. Référence croisée de l'interface en ligne de commande 188 E.2.22. Relocaliser svn switch --relocate URL_Depuis URL_Vers E.2.23. Créer un référentiel ici svnadmin create --fs-type fsfs PATH E.2.24. Ajouter svn add CHEMIN... Si vous avez choisi un dossier, TortoiseSVN le parcourt d'abord récursivement pour les éléments qui peuvent être ajoutés. E.2.25. Importer svn import -m Commentaire CHEMIN URL Commentaire représente ici le contenu de la boîte de saisie du commentaire. Cela peut être vide. E.2.26. Condamner svn blame -r N:M -v CHEMIN svn log -r N:M CHEMIN Si vous utilisez TortoiseBlame pour voir les informations de bannissement, le fichier de log est également requis pour afficher les messages de log dans une info-bulle. Si vous voyez le bannissement comme un fichier texte, cette information n'est pas exigée. E.2.27. Ajouter à la liste des ignorés svn propget svn:ignore CHEMIN > FichierTemp {éditez le nouvel élément à ignorer dans FichierTemp} svn propset svn:ignore -F FichierTemp CHEMIN Parce que la propriété svn:ignore est souvent composée de plusieurs lignes, elle est montrée ici comme étant modifiée via un fichier texte plutôt que directement en ligne de commande. E.2.28. Créer un patch svn diff CHEMIN > fichier_patch TortoiseSVN crée un patch dans le format de différences unifiées en comparant la copie de travail avec sa version de BASE. E.2.29. Appliquer un patch Appliquer un patch est une activité difficile à moins que le patch et la copie de travail ne soient à la même révision. Heureusement pour vous, vous pouvez utiliser TortoiseMerge, qui n'a aucun équivalent direct dans Subversion. 189 Annexe F. Détails de l'implémentation Cette annexe contient plus de détails concernant l'implémentation de quelques fonctionnalités de TortoiseSVN. F.1. Recouvrement d'icônes Every file and folder has a Subversion status value as reported by the Subversion library. In the command line client, these are represented by single letter codes, but in TortoiseSVN they are shown graphically using the icon overlays. Because the number of overlays is very limited, each overlay may represent one of several status values. L'icone de recouvrement En Conflit est utilisée pour représenter un état en conflit, là ou une mise à jour génère des conflits entre la version locale et la version du référentiel. Elle est aussi utilisée pour un état bloqué, qui peut se produire quand une opération ne se termine pas correctement. L'icone de recouvrement Modifié représente un état modifié, i.e. lorsque vous avez fait des modifications, l'état fusionné se produit lorsque les versions du référentiel ont changé et qu'elles ont été intégrées à la version locale, et l'état remplacé se produit lorsqu'un fichier a été supprimé et remplacé par un autre ayant le même nom mais dont le contenu est différent. L'icone de recouvrement Supprimé représente un état supprimé, i.e. lorsqu'un élément a été marqué comme étant à supprimer, ou un état manquant, i.e. lorsqu'un élément n'est pas présent en local. Naturellement un élément qui manque ne peut avoir lui même d'icone de recouvrement, mais le répertoire le contenant le peut. L'overlay indique juste qu'un fichier ou un dossier a été ajouté au contrôle de version. L'icone de recouvrement Dans Subversion est utilisé pour représenter un élément qui est dans un état normal, ou un élément sous contrôle de version dont l'état n'est pas encore connu. TortoiseSVN fonctionne avec un système de mise en cache en arrière plan pour récupérer les états, les mises à jours des icones de recouvrement peuvent donc prendre quelques secondes. L'icone de recouvrement A Besoin d'être Verrouilé est utilisé pour indiquer que la propriété svn:needs-lock est activée pour un fichier. Pour les copies de travail créées avec les versions 1.4.0 et ultérieures de Subversion, l'état de la propriété svn:needs-lock est mis en cache localement par Subversion et cette valeur est utilisée pour activer ou non l'icone de recouvrement. Pour les copies de travail créées avec des versions antérieures, TortoiseSVN utilise cette icone lorsque le fichier est en lecture seule. Notez que Subversion met à jour automatiquement le format des copies de travail lorsque vous faites une mise à jour, de ce fait la mise en cache de l'état de la propriété svn:needs-lock ne devrait pas se produite à moins que le fichier lui même ne soit pas à jour. Détails de l'implémentation 190 L'icone de recouvrement Verrouillé est utilisée lorsque le fichier est verrouillé dans la copie de travail. L'icône de recouvrement Ignoré indique qu'un élément est dans un état ignoré, soit car il satisfait une condition globale (global pattern) soit car il satisfait une condition du dossier parent. Cette icone de recouvrement est optionnelle. L'icône de recouvrement non versionné est utilisé pour représenté un élément étant dans l'état non versionné. C'est à dire un élément situé dans un répertoire sous contrôle de version, mais qui n'est pas lui même sous contrôle de version. Cette icone de recouvrement est optionelle. If an item has subversion status none (the item is not within a working copy) then no overlay is shown. If you have chosen to disable the Ignored and Unversioned overlays then no overlay will be shown for those files either. An item can only have one Subversion status value. For example a file could be locally modified and it could be marked for deletion at the same time. Subversion returns a single status value - in this case deleted. Those priorities are defined within Subversion itself. When TortoiseSVN displays the status recursively (the default setting), each folder displays an overlay reflecting its own status and the status of all its children. In order to display a single summary overlay, we use the priority order shown above to determine which overlay to use, with the Conflicted overlay taking highest priority. En fait, vous pouvez constater que toutes ces icônes ne sont pas utilisées sur votre système. C'est dû au fait que le nombre de recouvrements permis par Windows est limité à 15. Windows en utilise 4 et les 11 restantes peuvent être utilisés par d'autres applications. S'il n'a a pas assez d'emplacements libres, TortoiseSVN essaie d'être un « bon citoyen (TM) » et limite son utilisation des recouvrements pour laisser une chance aux autres applications. ? Normal, Modifié et En conflit sont toujours chargés et visibles. ? Supprimé est chargé si possible, mais dedevient Modifié s'il n'y a pas assez de connecteurs. ? Lecture seule est chargé si possible, mais redevient Normal s'il n'y a pas assez de connecteurs. ? Verrouillé est seulement chargé s'il y a moins de 13 recouvrements déjà chargés. Il devient Normal s'il n'y a pas assez d'emplacements. ? Ajouté est seulement chargé s'il y a moins de 14 recouvrements déjà chargés. Il devient Modifié s'il n'y a pas assez d'emplacements. 191 Annexe G. Sécuriser Svnserve grâce à SSH This section provides a step-by-step guide to setting up Subversion and TortoiseSVN to use the svn +ssh protocol. If you already use authenticated SSH connections to login to your server, then you are already there and you can find more detail in the Subversion book. If you are not using SSH but would like to do so to protect your Subversion installation, this guide gives a simple method which does not involve creating a separate SSH user account on the server for every subversion user. In this implementation we create a single SSH user account for all subversion users, and use different authentication keys to differentiate between the real Subversion users. In this appendix we assume that you already have the subversion tools installed, and that you have created a repository as detailed elsewhere in this manual. Note that you should not start svnserve as a service or daemon when used with SSH. Much of the information here comes from a tutorial provided by Marc Logemann, which can be found at www.logemann.org [http://www.logemann.org/2007/03/13/subversion-tortoisesvn-ssh-howto/] Additional information on setting up a Windows server was provided by Thorsten Müller. Thanks guys! G.1. Configurer un Serveur Liunx You need to have SSH enabled on the server, and here we assume that you will be using OpenSSH. On most distributions this will already be installed. To find out, type: ps xa | grep sshd and look for ssh jobs. One point to note is that if you build Subversion from source and do not provide any argument to ./ configure, Subversion creates a bin directory under /usr/local and places its binaries there. If you want to use tunneling mode with SSH, you have to be aware that the user logging in via SSH needs to execute the svnserve program and some other binaries. For this reason, either place /usr/local/ bin into the PATH variable or create symbolic links of your binaries to the /usr/sbin directory, or to any other directory which is commonly in the PATH. To check that everything is OK, login in as the target user with SSH and type: which svnserve This command should tell you if svnserve is reachable. Create a new user which we will use to access the svn repository: useradd -m svnuser Be sure to give this user full access rights to the repository. G.2. Configurer un Serveur Windows Install Cygwin SSH daemon as described here: http://pigtail.net/LRP/printsrv/cygwin-sshd.html Create a new Windows user account svnuser which we will use to access the repository. Be sure to give this user full access rights to the repository. Sécuriser Svnserve grâce à SSH 192 If there is no password file yet then create one from the Cygwin console using: mkpasswd -l > /etc/passwd G.3. Client SSH à utiliser avec TortoiseSVN Grab the tools we need for using SSH on the windows client from this site: http:// www.chiark.greenend.org.uk/~sgtatham/putty/ Just go to the download section and get Putty, Plink, Pageant and Puttygen. G.4. Création des certificats OpenSSH The next step is to create a key pair for authentication. There are two possible ways to create keys. The first is to create the keys with PuTTYgen on the client, upload the public key to your server and use the private key with PuTTY. The other is to create the key pair with the OpenSSH tool ssh-keygen, download the private key to your client and convert the private key to a PuTTY-style private key. G.4.1. Créer des clés en utilisant ssh-keygen Login to the server as root or svnuser and type: ssh-keygen -b 1024 -t dsa -N passphrase -f keyfile substituting a real pass-phrase (which only you know) and key file. We just created a SSH2 DSA key with 1024 bit key-phrase. If you type ls -l keyfile* you will see two files, keyfile and keyfile.pub. As you might guess, the .pub file is the public key file, the other is the private one. Append the public key to those in the .ssh folder within the svnuser home directory: cat keyfile.pub >> /home/svnuser/.ssh/authorized_keys In order to use the private key we generated, we have to convert it to a putty format. This is because the private key file format is not specified by a standards body. After you download the private key file to your client PC, start PuTTYgen and use Conversions ? Import key. Browse to your file keyfile which you got from the server the passphrase you used when creating the key. Finally click on Save private key and save the file as keyfile.PPK. G.4.2. Créer des clés en utilisant PuTTYgen Use PuTTYgen to generate a public-key/private-key pair and save it. Copy the public key to the server and append it to those in the .ssh folder within the svnuser home directory: cat keyfile.pub >> /home/svnuser/.ssh/authorized_keys G.5. Tester en utilisant PuTTY To test the connection we will use PuTTY. Start the program and on the Session tab set the hostname to the name or IP address of your server, the protocol to SSH and save the session as SvnConnection or whatever name you prefer. On the SSH tab set the preferred SSH protocol version to 2 and from Auth set the full path to the .PPK private key file you converted earlier. Go back to the Sessions tab and hit the Save button. You will now see SvnConnection in the list of saved sessions. Sécuriser Svnserve grâce à SSH 193 Click on Open and you should see a telnet style login prompt. Use svnuser as the user name and if all is well you should connect directly without being prompted for a password. You may need to edit /etc/sshd_config on the server. Edit lines as follows and restart the SSH service afterwards. PubkeyAuthentication yes PasswordAuthentication no PermitEmptyPasswords no ChallengeResponseAuthentication no G.6. Tester SSH avec TortoiseSVN So far we have only tested that you can login using SSH. Now we need to make sure that the SSH connection can actually run svnserve. On the server modify /home/svnuser/.ssh/ authorized_keys as follows to allow many subversion authors to use the same system account, svnuser. Note that every subversion author uses the same login but a different authentication key, thus you have to add one line for every author. Note: This is all on one very long line. command="svnserve -t -r <ReposRootPath> --tunnel-user=<author>", no-port-forwarding,no-agent-forwarding,no-X11-forwarding, no-pty ssh-rsa <PublicKey> <Comment> There are several values that you need to set according to your setup. <ReposRootPath> should be replaced with the path to the directory containing your repositories. This avoids the need to specify full server paths within URLs. Note that you must use forward slashes even on a Windows server, e.g. c:/svn/reposroot. In the examples below we assume that you have a repository folder within the repository root called repos. <author> should be replaced with the svn author that you want to be stored on commit. This also allows svnserve to use its own access rights within svnserve.conf. <PublicKey> should be replaced with the public key that you generated earlier. <Comment> can be any comment you like, but it is useful for mapping an svn author name to the person's real name. Right click on any folder in Windows Explorer and select TortoiseSVN ? Repo-Browser. You will be prompted to enter a URL, so enter one in this form: svn+ssh://svnuser@SvnConnection/repos What does this URL mean? The Schema name is svn+ssh which tells TortoiseSVN how to handle the requests to the server. After the double slash, you specify the user to connect to the server, in our case svnuser. After the @ we supply our PuTTY session name. This session name contains all details like where to find the private key and the server's IP or DNS. Lastly we have to provide the path to the repository, relative to the repository root on the server, as specified in the authorized_keys file. Click on OK and you should be able to browse the repository content. If so you now have a running SSH tunnel in conjunction with TortoiseSVN. Note that by default TortoiseSVN uses its own version of Plink to connect. This avoids a console window popping up for every authentication attempt, but it also means that there is nowhere for error messages to appear. If you receive the error « Unable to write to standard output », you can try specifying Plink as Sécuriser Svnserve grâce à SSH 194 the client in TortoiseSVN's network settings. This will allow you to see the real error message generated by Plink. G.7. Variantes de Configuration SSH One way to simplify the URL in TortoiseSVN is to set the user inside the PuTTY session. For this you have to load your already defined session SvnConnection in PuTTY and in the Connection tab set Auto login user to the user name, e.g. svnuser. Save your PuTTY session as before and try the following URL inside TortoiseSVN: svn+ssh://SvnConnection/repos This time we only provide the PuTTY session SvnConnection to the SSH client TortoiseSVN uses (TortoisePlink.exe). This client will check the session for all necessary details. At the time of writing PuTTY does not check all saved configurations, so if you have multiple configurations with the same server name, it will pick the first one which matches. Also, if you edit the default configuration and save it, the auto login user name is not saved. Many people like to use Pageant for storing all their keys. Because a PuTTY session is capable of storing a key, you don't always need Pageant. But imagine you want to store keys for several different servers; in that case you would have to edit the PuTTY session over and over again, depending on the server you are trying to connect with. In this situation Pageant makes perfect sense, because when PuTTY, Plink, TortoisePlink or any other PuTTY-based tool is trying to connect to an SSH server, it checks all private keys that Pageant holds to initiate the connection. For this task, simply run Pageant and add the private key. It should be the same private key you defined in the PuTTY session above. If you use Pageant for private key storage, you can delete the reference to the private key file in your saved PuTTY session. You can add more keys for other servers, or other users of course. Si vous ne voulez pas répéter cette manipulation après chaque redémarrage du client,, vous devez mettre Pageant dans la liste des programmes à exécuter au démarrage de Windows. Vous pouvez ajouter les clés avec leurs chemin complet comme arguments de Pageant.exe La dernière façon de se connecter à un serveur SSH est tout simplement d'utiliser cette URL dans TortoiseSVN: svn+ssh://svnuser@100.101.102.103/referentiel svn+ssh://svnuser@mondomaine.com/referentiel Comme vous pouvez le voir, nous n'utilisons pas une session PuTTY mais une adresse IP (ou un nom de domaine) comme cible. L'utilisateur est également stipulé, cela dit vous pourriez vous demander comment est trouvée la clé privée. Parce que TortoisePlink.exe n'est qu'une version modifiée de Plink, l'outil standard de la suite PuTTY, TortoiseSVN essaiera toutes les clés stockées dans Pageant. If you use this last method, be sure you do not have a default username set in PuTTY. We have had reports of a bug in PuTTY causing connections to close in this case. To remove the default user, simply clear HKEY_CURRENT_USER\Software\SimonTatham\Putty \Sessions\Default%20Settings\HostName 195 Chapitre 6. IBugtraqProvider interface To get a tighter integration with issue trackers than by simply using the bugtraq: properties, TortoiseSVN can make use of COM plugins. With such plugins it is possible to fetch information directly from the issue tracker, interact with the user and provide information back to TortoiseSVN about open issues, verify log messages entered by the user and even run actions after a successful commit to e.g, close an issue. We can't provide information and tutorials on how you have to implement a COM object in your preferred programming language, but we have example plugins in C++/ATL and C# in our repository in the contrib/issue-tracker-plugins folder. In that folder you can also find the required include files you need to build your plugin. (Section 3, « TortoiseSVN est gratuit ! » explains how to access the repository). 6.1. The IBugtraqProvider interface TortoiseSVN 1.5 can use plugins which implement the IBugtraqProvider interface. The interface provides a few methods which plugins can use to interact with the issue tracker. HRESULT ValidateParameters ( // Parent window for any UI that needs to be // displayed during validation. [in] HWND hParentWnd, // The parameter string that needs to be validated. [in] BSTR parameters, // Is the string valid? [out, retval] VARIANT_BOOL *valid ); This method is called from the settings dialog where the user can add and configure the plugin. The parameters string can be used by a plugin to get additional required information, e.g., the URL to the issue tracker, login information, etc. The plugin should verify the parameters string and show an error dialog if the string is not valid. The hParentWnd parameter should be used for any dialog the plugin shows as the parent window. The plugin must return TRUE if the validation of the parameters string is successful. If the plugin returns FALSE, the settings dialog won't allow the user to add the plugin to a working copy path. HRESULT GetLinkText ( // Parent window for any (error) UI that needs to be displayed. [in] HWND hParentWnd, // The parameter string, just in case you need to talk to your // web service (e.g.) to find out what the correct text is. [in] BSTR parameters, // What text do you want to display? // Use the current thread locale. [out, retval] BSTR *linkText ); The plugin can provide a string here which is used in the TortoiseSVN commit dialog for the button which invokes the plugin, e.g., "Choose issue" or "Select ticket". Make sure the string is not too long, IBugtraqProvider interface 196 otherwise it might not fit into the button. If the method returns an error (e.g., E_NOTIMPL), a default text is used for the button. HRESULT GetCommitMessage ( // Parent window for your provider's UI. [in] HWND hParentWnd, // Parameters for your provider. [in] BSTR parameters, [in] BSTR commonRoot, [in] SAFEARRAY(BSTR) pathList, // The text already present in the commit message. // Your provider should include this text in the new message, // where appropriate. [in] BSTR originalMessage, // The new text for the commit message. // This replaces the original message. [out, retval] BSTR *newMessage ); This is the main method of the plugin. This method is called from the TortoiseSVN commit dialog when the user clicks on the plugin button. The parameters string is the string the user has to enter in the settings dialog when he configures the plugin. Usually a plugin would use this to find the URL of the issue tracker and/or login information or more. The commonRoot string contains the parent path of all items selected to bring up the commit dialog. Note that this is not the root path of all items which the user has selected in the commit dialog. The pathList parameter contains an array of paths (as strings) which the user has selected for the commit. The originalMessage parameter contains the text entered in the log message box in the commit dialog. If the user has not yet entered any text, this string will be empty. The newMessage return string is copied into the log message edit box in the commit dialog, replacing whatever is already there. If a plugin does not modify the originalMessage string, it must return the same string again here, otherwise any text the user has entered will be lost. 6.2. The IBugtraqProvider2 interface In TortoiseSVN 1.6 a new interface was added which provides more functionality for plugins. This IBugtraqProvider2 interface inherits from IBugtraqProvider. HRESULT GetCommitMessage2 ( // Parent window for your provider's UI. [in] HWND hParentWnd, // Parameters for your provider. [in] BSTR parameters, // The common URL of the commit [in] BSTR commonURL, [in] BSTR commonRoot, [in] SAFEARRAY(BSTR) pathList, // The text already present in the commit message. // Your provider should include this text in the new message, // where appropriate. [in] BSTR originalMessage, // You can assign custom revision properties to a commit // by setting the next two params. IBugtraqProvider interface 197 // note: Both safearrays must be of the same length. // For every property name there must be a property value! // The content of the bugID field (if shown) [in] BSTR bugID, // Modified content of the bugID field [out] BSTR * bugIDOut, // The list of revision property names. [out] SAFEARRAY(BSTR) * revPropNames, // The list of revision property values. [out] SAFEARRAY(BSTR) * revPropValues, // The new text for the commit message. // This replaces the original message [out, retval] BSTR * newMessage ); This method is called from the TortoiseSVN commit dialog when the user clicks on the plugin button. This method is called instead of GetCommitMessage(). Please refer to the documentation for GetCommitMessage for the parameters that are also used there. The parameter commonURL is the parent URL of all items selected to bring up the commit dialog. This is basically the URL of the commonRoot path. The parameter bugID contains the content of the bug-ID field (if it is shown, configured with the property bugtraq:message). The return parameter bugIDOut is used to fill the bug-ID field when the method returns. The revPropNames and revPropValues return parameters can contain name/value pairs for revision properties that the commit should set. A plugin must make sure that both arrays have the same size on return! Each property name in revPropNames must also have a corresponding value in revPropValues. If no revision properties are to be set, the plugin must return empty arrays. HRESULT CheckCommit ( [in] HWND hParentWnd, [in] BSTR parameters, [in] BSTR commonURL, [in] BSTR commonRoot, [in] SAFEARRAY(BSTR) pathList, [in] BSTR commitMessage, [out, retval] BSTR * errorMessage ); This method is called right before the commit dialog is closed and the commit begins. A plugin can use this method to validate the selected files/folders for the commit and/or the commit message entered by the user. The parameters are the same as for GetCommitMessage2(), with the difference that commonURL is now the common URL of all checked items, and commonRoot the root path of all checked items. The return parameter errorMessage must either contain an error message which TortoiseSVN shows to the user or be empty for the commit to start. If an error message is returned, TortoiseSVN shows the error string in a dialog and keeps the commit dialog open so the user can correct whatever is wrong. A plugin should therefore return an error string which informs the user what is wrong and how to correct it. HRESULT OnCommitFinished ( // Parent window for any (error) UI that needs to be displayed. [in] HWND hParentWnd, // The common root of all paths that got committed. IBugtraqProvider interface 198 [in] BSTR commonRoot, // All the paths that got committed. [in] SAFEARRAY(BSTR) pathList, // The text already present in the commit message. [in] BSTR logMessage, // The revision of the commit. [in] ULONG revision, // An error to show to the user if this function // returns something else than S_OK [out, retval] BSTR * error ); This method is called after a successful commit. A plugin can use this method to e.g., close the selected issue or add information about the commit to the issue. The parameters are the same as for GetCommitMessage2. HRESULT HasOptions( // Whether the provider provides options [out, retval] VARIANT_BOOL *ret ); This method is called from the settings dialog where the user can configure the plugins. If a plugin provides its own configuration dialog with ShowOptionsDialog, it must return TRUE here, otherwise it must return FALSE. HRESULT ShowOptionsDialog( // Parent window for the options dialog [in] HWND hParentWnd, // Parameters for your provider. [in] BSTR parameters, // The parameters string [out, retval] BSTR * newparameters ); This method is called from the settings dialog when the user clicks on the "Options" button that is shown if HasOptions returns TRUE. A plugin can show an options dialog to make it easier for the user to configure the plugin. The parameters string contains the plugin parameters string that is already set/ entered. The newparameters return parameter must contain the parameters string which the plugin constructed from the info it gathered in its options dialog. That paramameters string is passed to all other IBugtraqProvider and IBugtraqProvider2 methods. 199 Glossaire Ajouter Une commande Subversion utilisée pour ajouter un fichier ou un répertoire à votre copie de travail. Les nouveaux éléments sont ajoutés au référentiel à la livraison. Aller sur... De même que « Mettre à jour à la révision » change la fenêtre de temps d'une copie de travail pour regarder un point différent dans l'histoire, « Aller sur... » modifie la fenêtre d'espace d'une copie de travail pour qu'elle pointe vers un endroit différent du référentiel. C'est particulièrement utile quand vous travaillez sur le tronc et les branches où seuls quelques fichiers diffèrent. Vous pouvez alors commuter votre copie de travail entre les deux et seuls les fichiers modifiés seront transférés. BDB Berkeley DB. Une base de données bien testée pour les référentiels, qui ne peut pas être utilisée sur les partages réseaux. Par défaut pour les référentiels pré 1.2. Branche Un terme fréquemment utilisé dans les système de contrôle de révisions pour décrire ce qu'il se passe quand le développement se scinde à un point particulier et suit 2 chemins séparés. Vous pouvez créer une branche en dehors de la ligne de développement principale pour développer une nouvelle fonctionnalité sans rendre la ligne principale instable. Ou vous pouvez faire une branche avec une version stable sur laquelle vous ne ferez que des corrections de bugs, tandis que les nouveaux développements seront faits sur la branche instable. Dans Subversion, une branche est implémentée comme une « copie bon marché ». Condamner Cette commande n'est utilisée que pour les fichiers texte et elle annote chaque ligne pour montrer la révision du référentiel à laquelle elle a été changée et l'auteur du changement. Notre implémentation graphique s'appelle TortoiseBlame et il montre aussi la date de dernière livraison et son commentaire au survol du numéro de révision avec la souris. Conflit Quand les changements du référentiel sont fusionnés avec les changements locaux, ces changements se produisent parfois sur les mêmes lignes. Dans ce cas, Subversion ne peut pas décider automatiquement quelle version utilisée et le fichier est dit en conflit. Vous devez éditer le fichier manuellement et résoudre le conflit avant de pouvoir livrer d'autres modifications. Copie de travail C'est votre « bac à sable » local, l'endroit où vous travaillez sur les fichiers versionnés et il réside normalement sur votre disque dur local. Vous créez une copie de travail en faisant une « Extraction » du référentiel et vous remettez vos modifications dans le référentiel en faisant une « Livraison ». Copier Dans un référentiel Subversion, vous pouvez créer une copie d'un unique fichier ou de toute une arborescence. Celles-ci sont implémentées comme des « copies bon marché » qui fonctionnent comme des liens vers l'original dans le sens où elles ne prennent quasiment pas de place. Faire une copie préserve l'historique de l'élément dans la copie, donc vous pouvez suivre les changements effectués avant que la copie n'ait été faite. Glossaire 200 Exporter Cette commande crée une copie d'un répertoire versionné, comme une copie de travail, mais sans les répertoires locaux .svn. Extraire Une commande Subversion qui crée une copie de travail locale dans un répertoire vide en téléchargeant les fichiers versionnés depuis le référentiel. FSFS Un système de gestion de fichier de Subversion pour référentiels. Peut être utilisé pour les partages réseaux. Utilisé par défaut pour les référentiels à partir de la version 1.2. Fusionner Le procédé par lequel les modifications du référentiel sont ajoutées dans votre copie de travail sans pertuber les changements que vous avez déjà faits localement. Parfois ces changements ne peuvent pas être réconciliés automatiquement et la copie de travail est dite en conflit. La fusion se produit automatiquement lors de la mise à jour de votre copie de travail. Vous pouvez aussi fusionner des changements spécifiques depuis une autre branche en utilisant la commande Fusionner de TortoiseSVN. GPO Group policy object (Stratégie de groupe) Historique Afficher l'historique des révisions d'un fichier ou d'un répertoire. Aussi appelé le « Journal ». Importer La commande Subversion pour importer une hiérarchie de dossiers complète dans le référentiel en une seule révision. Journal Afficher l'historique des révision d'un fichier ou d'un répertoire. Aussi connu comme l'« Historique ». Livrer Cette commande Subversion est utilisée pour renvoyer les changements de votre copie de travail locale au référentiel, en créant une nouvelle révision du référentiel. Mettre à jour Cette commande Subversion récupère les derniers changements depuis le référentiel vers votre copie de travail, en fusionnant les modifications faites par d'autres avec les modifications locales dans la copie de travail. Nettoyer Pour citer le manuel Subversion : « Nettoie récursivement la copie de travail, en supprimant les verrous et en reprenant les opérations non terminées. Si vous obtenez une erreur copie de travail verrouillée, exécutez cette commande pour supprimer les verrous périmés et rendre votre copie de travail utilisable à nouveau. » Notez que dans ce contexte, les « verrous » font référence aux verrouillages du système de fichiers local et non au verrouillage du référentiel. Patch Si la copie de travail n'a que des modifications sur des fichiers texte, il est possible d'utiliser la commande Subversion Voir les différences pour générer un unique fichier résumant ces changements dans le format de différences unifiées. Un fichier de ce type est souvent connu comme un « Patch » et il peut envoyé par email à quelqu'un d'autre (ou à une mailing list) et appliqué à une autre copie de travail. Une personne sans un accès pour livrer peut effectuer ces changements et soumettre un fichier patch à une personne autorisée à livrer pour qu'elle l'applique. Ou si vous n'êtes pas sûr d'un Glossaire 201 changement, vous pouvez soumettre un patch aux autres pour qu'ils l'examinent. Propriété En plus de versionner vos répertoires et vos fichiers, Subversion vous permet d'ajouter des métadonnées versionnées - connues comme des « propriétés » - à chacun de vos fichiers et répertoires versionnés. Chaque propriété possède un nom et une valeur, plutôt qu'une clé de régistre. Subversion dispose de quelques propriétés spéciales qu'il utilise en interne, comme svn:eol-style. TortoiseSVN en a aussi, tel que tsvn:logminsize. Vous pouvez ajouter vos propres propriétés avec des noms et des valeurs de votre choix. Propriété de révision (revprop) Comme les fichiers peuvent avoir des propriétés, chaque révision du référentiel le peut aussi. Quelques revprops spéciales sont ajoutées automatiquement quand la révision est créée, à savoir : svn:date svn:author svn:log qui représentent respectivement la date de livraison, le livreur et le commentaire. Ces propriétés peuvent être édités mais elles ne sont pas versionnées, donc les changements sont permanents et ne peuvent pas être annulés. Référentiel Un référentiel est un endroit central où sont stockées et entretenues les données. Un référentiel peut être un endroit où se trouvent plusieurs bases de données ou des fichiers pour la distribution sur un réseau, ou un référentiel peut être un emplacement directement accessible à l'utilisateur sans devoir traverser de réseaux. Relocaliser Si votre référentiel bouge, peut-être parce que vous l'avez déplacé dans un autre répertoire de votre serveur, ou le nom de domaine du serveur a changé, vous devez « relocaliser » votre copie de travail pour que ces URLs du référentiel pointent vers le nouvel emplacement. Note : vous ne devriez utiliser cette commande que si votre copie de travail fait référence au même emplacement dans le même référentiel, mais le référentiel a lui-même bougé. Dans d'autres circonstances, vous avez probablement besoin de la commande « Aller sur... » à la place. Résoudre Quand les fichiers d'une copie de travail sont laissés dans un état conflictuel suivant une fusion, ces conflits doivent être traités par une personne en utilisant un éditeur (ou peut-être TortoiseMerge). Ce procédé est connu comme « Résoudre les conflits ». Quand cela est fait, vous pouvez marqués les fichiers en conflit comme étant résolus, ce qui vous permet de les livrer. Revenir en arrière Subversion conserve une copie « primitive » locale de chaque fichier tel qu'il était lors de la dernière mise à jour de votre copie de travail. Si vous avez des changements et que vous décidez de les annuler, vous pouvez utiliser la commande « Revenir en arrière » pour revenir à la copie primitive. Révision Chaque fois que vous livrez un jeu de modifications, vous créez une nouvelle « révision » dans le référentiel. Chaque révision représente l'état de l'arborescence du référentiel à un certain point de son histoire. Si vous voulez revenir dans le temps, vous pouvez examiner le référentiel tel qu'il était à la révision N. Dans un autre sens, une révision peut faire référence à un jeu de modifications qui ont été faites quand la révision a été créée. Glossaire 202 Revision BASE La révision de base courante d'un fichier ou d'un répertoire dans votre copie de travail. C'est la révision à laquelle se trouvait le fichier ou le répertoire, à la dernière extraction, mise à jour ou livraison. La révision BASE est normalement différente de la révision HEAD. Révision HEAD La dernière révision d'un fichier ou d'un répertoire dans le référentiel. Supprimer Quand vous supprimez un élément versionné (et que vous livrez le changement), l'élément n'existe plus dans le référentiel après la révision livrée. Mais il existe bien sûr toujours dans les révisions précédentes du référentiel, donc vous pouvez toujours y avoir accès. Si besoin, vous pouvez copier un élément supprimé et le « réssusciter » complètement avec son historique. SVN Une abbréviation pour Subversion fréquemment utilisée. Le nom du protocole personnalisé de Subversion utilisé par le serveur de référentiel « svnserve ». Verrouiller Quand vous retirez un verrou sur un élément versionné, vous le marquez comme non livrable dans le référentiel, sauf dans la copie de travail où il a été déverrouillé. Voir les différences Très utile quand vous voulez voir exactement quels changements ont été faits. 203 Index Symboles 'Copie de travail' non versionnée, 127 A Accès, 16 actions côte serveur, 120 Afficher les modifications, 52 ajouter, 82 Ajouter des fichiers au référentiel., 42 aller sur, 102 annoter, 117 annuler, 90, 171 Annuler la livraison, 171 Annuler les modifications, 171 Apache, 26 approuver, 117 Authentification, 41 auto-props, 95 automatisation, 178, 181 Autorisation, 30 B branche, 83, 100 bug tracker, 130, 130 bug tracking, 71, 130 C Changements de casse, 89 Chemins UNC, 16 click-droit, 37 client en ligne de commande, 183 Colonnes de l'explorateur, 59 COM, 164, 195 commentaire, 170 Commentaires de livraison, 64, 170 compare des répertoires, 172 comparer, 77 comparer des fichiers, 172 comparer des images, 81 comparer des révisions, 79 condamner, 117 configuration, 135 conflit, 9, 54 Conflit dans l'arborescence, 54 conflits de la fusion, 110 contrôle de version, 1 contrôleur de domaine, 31, 175 copie, 100, 120 copie de travail, 9 copier des fichiers, 83 Créer Client de ligne de commande, 15 TortoiseSVN, 15 Créer un référentiel, 15 Créer une copie de travail, 44 D déplacer, 88, 170 déplacer des fichiers, 83 deployer, 175 Désactiver des fonctions, 176 Détacher du référentiel, 174 Développer les mot-clés, 93 déversionner, 129, 174 dictionnaire, 3 différencier, 62 Différencier, 77, 116 Domaine Windows, 31 E éditer le journal/l'auteur, 72 enlever, 87 Entrées du menu contextuel, 176 Envoyer les changements, 47 Etat de la copie de travail, 58 étiquette, 83, 100 exclusion globale, 136 expansion des jokers, 85 explorateur, 1 explorateur de référentiel, 120 exportation, 127 exporter les changements, 79 externes, 97, 172 extraction, 44 Extraction, 47 extraction de version, 164 F FAQ, 169 fichiers spéciaux, 44 fichiers temporaires, 42 Fichiers/dossiers non versionnés, 84 filtrer, 73 fusionner, 103 Deux arborescences, 107 plage de révisions, 104 réintégration, 106 G glisser avec le bouton droit, 40 glisser-déposer, 40, 40 GPO, 175 graphique, 123 Graphique des révisions, 123 H historique, 64 hooks, 19 hooks clients, 157 Index 204 I IBugtraqProvider, 195 icônes, 58 ignorer, 84 ILC, 183 importer, 42 importer en place, 43 Index des projets, 30 installer, 3 intégration des fusions, 111 Interface COM SubWCRev, 166 issue tracker, 130, 195 J journal, 64 L L'URL a changé, 129 l'URL du référentiel a changé, 129 le serveur a été déplacé, 129, 129 lecteurs SUBST, 147 lecture seule, 112 lien, 19 lien d'extraction, 19 Lien TortoiseSVN, 19 ligne de commande, 178, 181 liste de changements, 62 liste de modifications, 172 livraison, 47 M Manuel de Subversion, 5 Marquer la release, 100 maximiser, 42 Mémoire Cache des messages de log, 154 menu contextuel, 37 message vide, 170 Messages de log, 64 mise à jour, 52, 171 modèle d'exclusion, 136 modifications, 60 mod_authz_svn, 27, 30 mot-clés, 93 msi, 175 N nettoyer, 91 NTLM, 31 Numéro de version dans les fichiers, 164 O outils de différenciation, 82 outils de fusion, 82 P packs de langue, 3 Partage réseau, 16 patch, 116 pattern matching, 85 plugin, 195 Plusieurs authentifications, 32 priorité des recouvements, 189 projets ASP, 176 projets communs, 172 propriétés, 91 Propriétés de la révision, 72 Propriétés de TortoiseSVN, 96 Propriétés du projet, 96 Propriétés Subversion, 92 R raccourci, 174 recouvrement, 58, 189 référentiel, 5, 42 référentiels externes, 97 registre, 161 relocaliser, 129 renommer, 88, 120, 170 renommer des fichiers, 83 réorganiser, 170 répertoire .svn, 163 répertoire _svn, 163 Résoudre, 54 retirer la mise sous contrôle de version, 174 revenir en arrière, 90, 171 révision, 12, 123 revprops, 72 S SASL, 24 sauvegarde, 18 Scripts de hook côté serveur, 19 scripts hook, 19, 157 serveur proxy, 148 Shell Windows, 1 Site internet, 19 sons, 135 SSL, 33 SSPI, 31 statistiques, 73 statut, 58, 60 stratégies de groupe, 175, 176 SubWCRev, 164 Suivi des fusions, 110 supprimer, 87 SVNParentPath, 28, 30 SVNPath, 28 svnserve, 20, 22 SVN_ASP_DOT_NET_HACK, 176 T TortoiseIDiff, 81 traductions, 3 Index 205 V vendor projects, 172 vérificateur d'orthographe, 3 vérification de mise à niveau, 175 Vérifier les mises à jour, 175 verrouiller, 112 version, 175 Versionner les nouveaux fichiers, 82 ViewVC, 134 Visualiseur de différences unifiées, 116 visualiseur de référentiel, 120, 134 Voir les modifications, 58 VS2003, 176 Vue web, 134 W WebDAV, 26 WebSVN, 134

PARTAGER SUR

Envoyer le lien par email
25338
READS
63
DOWN
7
FOLLOW
7
EMBED
DOCUMENT # TAGS
#tortoise  #SVN  #CVS  #versionning  #gestion version 

licence non indiquée


DOCUMENT # INDEX
Process 
img

Partagé par  guido

 Suivre

Auteur:
Source:Non communiquée