Gestion de versions avec Subversion

Pour Subversion 1.5

(Compilé à partir de la Revision5129)

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/ pour la version anglaise qui fait foi et sur http://creativecommons.org/licenses/by/2.0/ pour une traduction partielle en français. Vous pouvez aussi envoyez une lettre à Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

(TBA)


Table des matières

Avant-propos
Préface
Public visé
Comment lire ce livre
Conventions utilisées dans ce livre
Organisation de ce livre
Ce livre est libre
Remerciements
De Ben Collins-Sussman
De Brian W. Fitzpatrick
De C. Michael Pilato
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
1. Notions fondamentales
Le dépôt
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
URL des dépôts Subversion
Copies de travail
Révisions
Les copies de travail suivent l'évolution du dépôt
Copies de travail mixtes, à révisions mélangées
Mise à jour et propagation sont deux choses distinctes
Des révisions mélangées sont normales
Un mélange de révisions est utile
Les mélanges de révisions ont des limites
Résumé
2. Utilisation de base
À l'aide !
Enregistrement de données dans votre dépôt
svn import
Organisation conseillée de votre dépôt
Extraction initiale
Interdiction de la mise en cache du mot de passe
Authentification sous un autre nom
Cycle de travail de base
Mettre à jour votre copie de travail
Apporter des modifications à votre copie de travail
Examiner les changements apportés
Avoir une vue d'ensemble des changements effectués
Voir en détail les modifications que vous avez effectuées
Annuler des changements sur la copie de travail
Résoudre les conflits (fusionner des modifications)
Voir les lignes en conflit de façon interactive
Résoudre les conflits en mode interactif
Remettre à plus tard la résolution d'un conflit
Résoudre les conflits à la main
Abandonner vos modifications au profit de la révision la plus récente
Revenir en arrière : utiliser svn revert
Propager vos modifications
Utilisation de l'historique
Affichage de l'historique
Détail des modifications passées
Modifications locales
Comparaison d'une copie de travail au dépôt
Comparaison de révisions du dépôt
Navigation dans le dépôt
svn cat
svn list
Anciennes versions d'un dépôt
Parfois, il suffit de faire le ménage
Se débarrasser d'une copie de travail
Reprendre après une interruption
Résumé
3. Sujets avancés
Identifiants de révision
Mots-clés de révision
Dates de révision
Propriétés
Utilisation des propriétés
Manipulation des propriétés
Les propriétés et le cycle de travail Subversion
Configuration automatique des propriétés
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
Piquets de révisions et révisions opérationnelles
Listes de modifications
Création et modification d'une liste 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
Mise en cache des éléments d'authentification du client
Résumé
4. Gestion des branches
Qu'est-ce qu'une branche ?
Utilisation des branches
Création d'une branche
Travail sur votre branche
Gestion des branches par Subversion : notions clé
Fusions : pratiques de base
Ensembles de modifications
Comment garder une branche synchronisée
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 fournisseur
Procédure générale de gestion des branches fournisseur
svn_load_dirs.pl
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
Choix du magasin de données
Berkeley DB
FSFS
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 la base de données Berkeley DB
Maintenance d'un dépôt
Boîte à outils de l'administrateur
svnadmin
svnlook
svndumpfilter
svnsync
fsfs-reshard.py
Utilitaires Berkeley DB
Correction des messages de propagation
Gestion de l'espace disque
Économie d'espace disque
Suppression des transactions mortes
Purge des fichiers de journalisation inutilisés de Berkeley DB
Rétablissement de bases de données Berkeley DB
Migration des données d'un dépôt
Filtrage de l'historique d'un dépôt
Réplication d'un dépôt
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 encapsulé dans un tunnel
svnserve en tant que service Windows
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
httpd, le serveur HTTP Apache
Prérequis
Configuration Apache de base
Options d'authentification
Mise en place de l'authentification HTTP
Gestion des certificats SSL
Options de contrôle d'accès
Contrôle d'accès générique
Contrôle d'accès par répertoire
Désactivation du contrôle sur les chemins
Fonctionnalités bonus
Navigation dans les dépôts
Journalisation Apache
Mandataire en écriture
Autres fonctionnalités d'Apache
Contrôle d'accès basé sur les chemins
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
Fichier servers
Fichier config
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
Programme externe de comparaison
Programme externe de comparaison de trois fichiers
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
Au cœur de la zone d'administration de la copie locale
Le fichier « entries »
Copies originales et propriétés des fichiers
Utiliser les API
APR, la bibliothèque Apache de portabilité des exécutables
Prérequis pour les URL et les chemins
Utiliser d'autres langages que C et C++
Exemples de code
Résumé
9. Références complètes de Subversion
Le client Subversion en ligne de commande : svn
Options de svn
Sous-commandes svn
svn add
svn blame
svn cat
svn changelist
svn checkout
svn cleanup
svn commit
svn copy
svn delete
svn diff
svn export
svn help
svn import
svn info
svn list
svn lock
svn log
svn merge
svn mergeinfo
svn mkdir
svn move
svn propdel
svn propedit
svn propget
svn proplist
svn propset
svn resolve
svn resolved
svn revert
svn status
svn switch
svn unlock
svn update
svnadmin
svnadmin Options
svnadmin Subcommands
svnadmin crashtest
svnadmin create
svnadmin deltify
svnadmin dump
svnadmin help
svnadmin hotcopy
svnadmin list-dblogs
svnadmin list-unused-dblogs
svnadmin load
svnadmin lslocks
svnadmin lstxns
svnadmin recover
svnadmin rmlocks
svnadmin rmtxns
svnadmin setlog
svnadmin setrevprop
svnadmin setuuid
svnadmin upgrade
svnadmin verify
svnlook
Options de svnlook
svnlook Subcommands
svnlook author
svnlook cat
svnlook changed
svnlook date
svnlook diff
svnlook dirs-changed
svnlook help
svnlook history
svnlook info
svnlook lock
svnlook log
svnlook propget
svnlook proplist
svnlook tree
svnlook uuid
svnlook youngest
svnsync
svnsync Options
svnsync Subcommands
svnsync copy-revprops
svnsync help
svnsync initialize
svnsync synchronize
svnserve
Options de svnserve
svndumpfilter
svndumpfilter Options
svndumpfilter Subcommands
svndumpfilter exclude
svndumpfilter include
svndumpfilter help
svnversion
svnversion
mod_dav_svn
Directives de configuration de mod_dav_svn
mod_authz_svn
Directives de configuration de mod_authz_svn
Propriétés dans Subversion
Propriétés gérées en versions
Propriétés non gérées en versions
Procédures automatiques du dépôt
start-commit
pre-commit
post-commit
pre-revprop-change
post-revprop-change
pre-lock
post-lock
pre-unlock
post-unlock
A. Guide de démarrage rapide avec Subversion
Installer 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
svn status
svn update
Branches et étiquettes
Propriétés des méta-donné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. Copyright
Index

Liste des illustrations

1. 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. Système de fichiers du dépôt
1.7. Le 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. URL d'accès au dépôt
4.1. Commandes de gestion des branches et des fusions
5.1. Comparaison des magasins de données de dépôts
6.1. Comparaison des fonctionnalités des serveurs Subversion
C.1. Principaux clients WebDAV

Liste des exemples

5.1. txn-info.sh (lister les transactions inachevées)
5.2. Procédure automatique pre-revprop-change du dépôt miroir
5.3. Procédure automatique start-commit du dépôt miroir
6.1. Exemple-type de configuration : accès anonyme
6.2. Exemple-type de configuration : accès authentifié
6.3. Exemple-type de configuration : accès mixte authentifié/anonyme
6.4. Désactiver complètement les contrôles sur les chemins
7.1. Exemple de fichier de modification de la base de registre (.reg)
7.2. interface-diff.py
7.3. interface-diff.bat
7.4. interface-diff3.py
7.5. interface-diff3.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