This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.

Gestion de versions avec Subversion [En cours de rédaction]

Pour Subversion 1.8

(Compilé à partir de r5746)

Ben Collins-Sussman

Brian W. Fitzpatrick

C. Michael Pilato

Ce travail est placé sous la licence Creative Commons Attribution. Pour voir le contenu de cette licence, rendez-vous sur http://creativecommons.org/licenses/by/2.0/fr/. Vous pouvez aussi envoyez une lettre à Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.


Table des matières

Avant-propos
Préface
Qu'est-ce que Subversion ?
Subversion est-il l'outil approprié ?
L'histoire de Subversion
L'architecture de Subversion
Les composantes de Subversion
Ce qui a changé dans Subversion
Public visé
Comment lire ce livre
Organisation de ce livre
Ce livre est libre
Remerciements
I. Faire connaissance avec Subversion
1. Notions fondamentales
Notions générales de la gestion de versions
Le dépôt
Copie de travail
Modèles de gestion de versions
Problématique du partage de fichiers
Modèle verrouiller-modifier-libérer
Modèle copier-modifier-fusionner
Subversion en action
Dépôts Subversion
Révisions
URL des dépôts Subversion
Copies de travail
Fonctionnement de la copie de travail
Actions de base sur la copie de travail
Copies de travail mixtes, à révisions mélangées
Résumé
2. Utilisation de base
À l'aide !
Enregistrement de données dans le dépôt
Importation de fichiers et de dossiers
Organisation conseillée d'un dépôt
Limitations sur les noms
Création d'une copie de travail
Cycle de travail de base
Mise à jour de la copie de travail
Modifications dans la copie de travail
Revue des changements apportés
Vue d'ensemble des changements effectués
Détail des modifications effectuées localement
Annulation des changements de la copie de travail
Résolution des conflits
Traitement des lignes en conflit de façon interactive
Résolution des conflits en mode interactif
Remise à plus tard de la résolution d'un conflit
Résolution des conflits à la main
Abandon des modifications au profit de la révision la plus récente
Retour en arrière avec svn revert
Propagation des modifications
Recherche dans l'historique
Détail des modifications passées
Modifications locales
Comparaison entre la copie de travail et le dépôt
Comparaison entre des révisions du dépôt
Historique des modifications
Navigation dans le dépôt
Affichage du contenu d'un fichier
Affichage ligne par ligne des auteurs de modifications
Contenu des dossiers suivis en versions
Extraction d'anciennes versions au sein d'un dépôt
Parfois, il suffit de faire le ménage
Suppression d'une copie de travail
Reprise après une interruption
Gestion des conflits d'arborescences
Un exemple de conflit d'arborescences
Résumé
3. Sujets avancés
Identifiants de révisions
Mots-clés de révision
Dates de révision
Révisions pivots et révisions opérationnelles
Propriétés
Utilisation des propriétés
Manipuler les propriétés
Les propriétés et le cycle de travail Subversion
Propriétés héritées
Configuration automatique des propriétés
Propriétés réservées à l'usage de Subversion
Propriétés suivies en versions
Propriétés non suivies en versions
Portabilité des fichiers
Type de contenu des fichiers
Fichiers exécutables ou non
Caractères de fin de ligne
Occultation des éléments non suivis en versions
Substitution de mots-clés
Répertoires clairsemés
Verrouillage
Création d'un verrou
Identification d'un verrou
Cassage et vol d'un verrou
Communication par l'intermédiaire des verrous
Définition de références externes
Listes de modifications
Création et modification de listes de modifications
Listes de modifications : des filtres pour vos opérations
Limitations des listes de modifications
Modèle de communication réseau
Requêtes et réponses
Éléments d'authentification du client
Mise en cache des éléments d'authentification
Désactivation de la mise en cache des mots de passe
Suppression des éléments d'authentification déjà en cache
Authentification en ligne de commande
Un dernier mot sur l'authentification
Travail sans copie de travail
Opérations du client texte interactif à distance
Utilisation de svnmucc
Résumé
4. Gestion des branches
Définition d'une branche
Utilisation des branches
Création d'une branche
Travail sur votre branche
Gestion des branches par Subversion : notions clés
Fusions : pratiques de base
Ensembles de modifications
Garder une branche synchronisée
Fusions de sous-arborescences et mergeinfo
Réintegration d'une branche
Mergeinfo et aperçus
Retour en arrière sur des modifications
Résurrection des éléments effacés
Fusions : pratiques avancées
Sélection à la main
Syntaxe de la fusion : pour tout vous dire
Fusions sans mergeinfo
Plus de détails sur les conflits liés aux fusions
Blocage de modifications
Historiques et annotations tenant compte des fusions passées
Prise en compte ou non de l'ascendance
Fusions, copies et renommages
Blocage des clients qui ne prennent pas en compte les fusions
Recommandations finales sur le suivi des fusions
Parcours des branches
Étiquettes
Création d'une étiquette simple
Création d'une étiquette complexe
Maintenance des branches
Agencement du dépôt
Durée de vie des données
Modèles courants de gestion des branches
Branches de publication
Branches fonctionnelles
Branches fournisseurs
Procédure générale de gestion des branches fournisseurs
Branches fournisseurs depuis des dépôts externes
Branches fournisseurs à partir de sources mirroirs
Créer une branche ou ne pas créer une branche ?
Résumé
5. Administration d'un dépôt
Définition d'un dépôt Subversion
Stratégies de déploiement d'un dépôt
Stratégies d'organisation d'un dépôt
Stratégies d'hébergement d'un dépôt
Contrôle d'accès au dépôt
Création et configuration d'un dépôt
Création d'un dépôt
Mise en place des procédures automatiques
Configuration de l'environnement des procédures automatiques
Utilisations classiques des procédures automatiques
Trouver des procédures automatiques ou écrire les vôtres
Configuration de FSFS
Maintenance d'un dépôt
Boîte à outils de l'administrateur
svnadmin
svnlook
svndumpfilter
svnrdump
svnsync
fsfs-reshard.py
Correction des commentaires de propagation
Gestion de l'espace disque
Économie d'espace disque
Suppression des transactions mortes
Tasser le système de fichiers FSFS
Migration des données d'un dépôt
Migration des données d'un dépôt à l'aide de svnadmin
Migration des données d'un dépôt en utilisant svnrdump
Filtrage de l'historique d'un dépôt
Réplication d'un dépôt
Réplication avec svnsync
Réplication partielle avec svnsync
Une astuce rapide pour la création de mirroirs
Autour des réplications
Sauvegarde d'un dépôt
Gestion des identifiants uniques (UUID) des dépôts
Déplacement et suppression d'un dépôt
Résumé
6. Configuration du serveur
Présentation générale
Choix d'une configuration serveur
Serveur svnserve
svnserve sur SSH
Serveur HTTP Apache
Recommandations
svnserve, un serveur sur mesure
Démarrage du serveur
svnserve en serveur autonome
svnserve via inetd
svnserve via xinetd
svnserve encapsulé dans un tunnel
svnserve en tant que service Windows
svnserve en tant que tâche launchd
Authentification et contrôle d'accès intégrés
Création d'un fichier utilisateurs et d'un domaine d'authentification
Mise en place du contrôle d'accès
Utilisation de svnserve avec SASL
Authentification par SASL
Chiffrement SASL
Encapsulation de svnserve dans un tunnel SSH
Astuces de configuration de SSH
Mise en œuvre initiale
Contrôle de la commande à exécuter
Référence pour la configuration de svnserve
Configuration générale
Configuration de Cyrus SASL
httpd, le serveur HTTP Apache
Prérequis
Configuration Apache de base
Options d'authentification
Mise en place de l'authentification HTTP basique
Authentification par condensat (digest)
Contrôle d'accès
Contrôle d'accès général
Contrôle d'accès par répertoire
Désactivation du contrôle sur les chemins
Fichier de contrôle d'accès suivi en versions dans le dépôt
Encapsulation du trafic réseau avec SSL
Configuration du certificat serveur SSL de Subversion
Gestion des certificats clients SSL Subversion
Amélioration des performances
KeepAlive
Mises à jour groupées
Fonctionnalités bonus
Navigation dans les dépôts
Journalisation Apache
Mandataire en écriture
Autres fonctionnalités d'Apache
Référence pour la configuration d'un serveur Subversion HTTP Apache
Directives de configuration de mod_dav_svn
Directives de configuration de mod_authz_svn
Contrôle d'accès basé sur les chemins
Introduction au contrôle d'accès basé sur les chemins
Contrôle d'accès par groupes
Alias
Fonctionnalités avancées de contrôle d'accès
Embûches avec le contrôle d'accès
Journalisation du haut-niveau
Optimisation du serveur
Mise en cache des données
Compression des données sur le réseau
Accès au dépôt par plusieurs méthodes
7. Personnalisation de Subversion
Zone de configuration des exécutables
Agencement de la zone de configuration
Configuration via la base de registre Windows
Options de configuration
Configuration générale
Configuration spécifique à un serveur
Localisation
Généralités sur la localisation
Utilisation des paramètres régionaux par Subversion
Utilisation d'éditeurs externes
Utilisation des outils externes de comparaison et de fusion
Programmes externes de comparaison
Programmes externes de comparaison de trois fichiers
Outils de fusion externes
Résumé
8. Intégration de Subversion
Organisation des bibliothèques en couches successives
Couche dépôt
Couche d'accès au dépôt
Couche client
Utilisation des API
APR, la bibliothèque Apache de portabilité des exécutables
Fonctions et bâtons
Prérequis pour les URL et les chemins
Utilisation d'autres langages que C et C++
Exemples de code
Résumé
II. Guide de référence des commandes Subversion
I. Guide de référence de svn : le client texte interactif
svn add
svn blame (praise, annotate, ann)
svn cat
svn changelist (cl)
svn checkout (co)
svn cleanup
svn commit (ci)
svn copy (cp)
svn delete (del, remove, rm)
svn diff (di)
svn export
svn help (h, ?)
svn import
svn info
svn list (ls)
svn lock
svn log
svn merge
svn mergeinfo
svn mkdir
svn move (mv)
svn patch
svn propdel (pdel, pd)
svn propedit (pedit, pe)
svn propget (pget, pg)
svn proplist (plist, pl)
svn propset (pset, ps)
svn relocate
svn resolve
svn resolved
svn revert
svn status (stat, st)
svn switch (sw)
svn unlock
svn update (up)
svn upgrade
II. Guide de référence de svnadmin : administration des dépôts Subversion
svnadmin crashtest
svnadmin create
svnadmin deltify
svnadmin dump
svnadmin freeze
svnadmin help (h, ?)
svnadmin hotcopy
svnadmin list-dblogs
svnadmin list-unused-dblogs
svnadmin load
svnadmin lock
svnadmin lslocks
svnadmin lstxns
svnadmin pack
svnadmin recover
svnadmin rmlocks
svnadmin rmtxns
svnadmin setlog
svnadmin setrevprop
svnadmin setuuid
svnadmin unlock
svnadmin upgrade
svnadmin verify
III. Guide de référence de svnlook : outil d'exploration du contenu d'un dépôt Subversion
svnlook author
svnlook cat
svnlook changed
svnlook date
svnlook diff
svnlook dirs-changed
svnlook filesize
svnlook help (h, ?)
svnlook history
svnlook info
svnlook lock
svnlook log
svnlook propget (pget, pg)
svnlook proplist (plist, pl)
svnlook tree
svnlook uuid
svnlook youngest
IV. Guide de référence de svnserve : serveur Subversion sur mesure
svnserve
V. Guide de référence de svnversion : informations relatives à la copie de travail Subversion
svnversion
VI. Guide de référence de svnsync : réplication de dépôt Subversion
svnsync copy-revprops
svnsync help
svnsync info
svnsync initialize (init)
svnsync synchronize (sync)
VII. Guide de référence de svnrdump : migration à distance des données d'un dépôt Subversion
svnrdump dump
svnrdump help
svnrdump load
VIII. guide de référence de svndumpfilter : outil de filtrage de l'historique de Subversion
svndumpfilter exclude
svndumpfilter include
svndumpfilter help
IX. Guide de référence de svnmucc : client texte Subversion pour URL multiples
svnmucc
X. Guide de référence des procédures automatiques de Subversion
start-commit
pre-commit
post-commit
pre-revprop-change
post-revprop-change
pre-lock
post-lock
pre-unlock
post-unlock
III. Appendices
A. Guide de démarrage rapide avec Subversion
Installation de Subversion
Tutoriel rapide
B. Guide Subversion à l'usage des utilisateurs de CVS
Les numéros de révisions sont différents
Suivi de versions des répertoires
Davantage d'opérations en mode déconnecté
Distinction entre les commandes status et update
Status
Update
Branches et étiquettes
Propriétés des métadonnées
Résolution des conflits
Fichiers binaires et conversions
Gestion de versions des modules
Authentification
Conversion d'un dépôt CVS vers Subversion
C. WebDAV et la gestion de versions automatique
À propos de WebDAV
Gestion de versions automatique
Interopérabilité des clients
Applications WebDAV autonomes
Microsoft Office, Dreamweaver, Photoshop
cadaver, DAV Explorer
Greffons WebDAV pour explorateur de fichiers
Dossiers Web de Microsoft
Nautilus, Konqueror
Implémentations de WebDAV en système de fichiers
WebDrive, NetDrive
Mac OS X
davfs2 (Linux)
D. Le système de fichiers Berkeley DB
Configuration de l'environnement Berkeley DB
Limites de Berkeley DB
Limites architecturales
Déploiement sur un partage réseau
Tolérance aux pannes et restauration
Maintenance d'un dépôt Berkeley DB
Rétablissement de bases de données Berkeley DB
Purge des fichiers de journalisation inutilisés
Utilitaires Berkeley DB
E. Copyright
Index

Liste des illustrations

1. L'architecture de Subversion
1.1. Un authentique système client/serveur
1.2. La situation à éviter
1.3. Modèle verrouiller-modifier-libérer
1.4. Modèle copier-modifier-fusionner
1.5. Modèle copier-modifier-fusionner (suite)
1.6. L'évolution de l'arborescence au cours du temps
1.7. Système de fichiers du dépôt
4.1. Branches de développement
4.2. Structure initiale du dépôt
4.3. Dépôt avec nouvelle copie
4.4. Historique des branches d'un fichier
8.1. Fichiers et répertoires en deux dimensions
8.2. Prise en compte du temps — la troisième dimension de la gestion de versions !

Liste des tableaux

1.1. Les différents motifs d'URL pour l'accès aux dépôts
2.1. Requêtes classiques dans l'historique
4.1. Commandes de gestion des branches et des fusions
6.1. Comparaison des fonctionnalités des serveurs Subversion
C.1. Principaux clients WebDAV

Liste des exemples

4.1. Procédure automatique de vérification des capacités de suivi des fusions avant une propagation
5.1. hooks-env (configuration personnalisée de l'environnement des procédures automatiques)
5.2. procédure automatique start-commit qui s'assure que le client sait suivre les fusions.
5.3. txn-info.sh (lister les transactions inachevées)
5.4. Procédure automatique pre-revprop-change du dépôt miroir
5.5. Procédure automatique start-commit du dépôt miroir
6.1. Exemple de fichier de définition de tâche launchd pour svnserve
6.2. Exemple-type de configuration : accès anonyme
6.3. Exemple-type de configuration : accès authentifié
6.4. Exemple-type de configuration : accès mixte authentifié/anonyme
6.5. Désactiver complètement les contrôles sur les chemins
6.6. Utilisation d'un fichier de contrôle d'accès unique suivi en versions à l'intérieur d'un dépôt
6.7. Utilisation d'un fichier de contrôle d'accès spécifique pour chaque dépôt
7.1. Exemple de fichier de modification de la base de registre (.reg)
7.2. diffwrap.py
7.3. diffwrap.bat
7.4. diff3wrap.py
7.5. diff3wrap.bat
7.6. mergewrap.py
7.7. mergewrap.bat
8.1. Utilisation de la couche dépôt
8.2. Utilisation de la couche dépôt en Python
8.3. Une version de status en Python