subversion
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédente | |||
| subversion [2026/09/07 20:54] – supprimée - modification externe (Date inconnue) 127.0.0.1 | subversion [2026/09/07 21:03] (Version actuelle) – créée - modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== 1. Introduction ====== | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | Un système de contrôle de version vise plusieurs objectifs : | ||
| + | * permettre la **collaboration** entre plusieurs utilisateurs sur un projet (fichiers) commun(s) | ||
| + | * permettre la maintenance smultanée de différentes versions d'un même projet | ||
| + | * tracer et enregistrer l' | ||
| + | * consulter les informations historiques, | ||
| + | |||
| + | Il existe de nombreux systèmes de contrôles de version comparables, | ||
| + | |||
| + | A noter qu'il existe une famille nombreuse de système de contrôle de version dit distribuées, | ||
| + | |||
| + | ====== 2. Notions fondamentales ====== | ||
| + | |||
| + | ===== Repository ===== | ||
| + | |||
| + | Subversion utilisant un modèle centralisé, | ||
| + | |||
| + | Un repository contient en particulier les données du projet et toutes ses informations historiques. Avec Subversion, la taille du repository est donc en constante augmentation. Cette augmentation est liée à la quantité de modifications apportées (et leur nature). | ||
| + | |||
| + | ===== Serveur ===== | ||
| + | |||
| + | Il existe plusieurs types de modèle serveur pour publier un // | ||
| + | |||
| + | ===== Utilisateurs ===== | ||
| + | |||
| + | Bien que la notion d' | ||
| + | |||
| + | ===== Check out, Working copy ===== | ||
| + | |||
| + | Chaque client peut travailler sur le projet en obtenant une //copie de travail// grâce à une opération dite de //check out//. On peut donc travailler avec Subversion de manière déconnectée, | ||
| + | |||
| + | Chaque client peut utiliser autant de copie de travail qu'il le souhaite, en particulier il est naturel d'en avoir une par version maintenue d'un même projet (projet-1.1, | ||
| + | |||
| + | ===== Update ===== | ||
| + | |||
| + | Un client souhaite régulièrement récupérer les dernières modifications des autres utilisateurs en mettant à jour sa copie de travail, c'est l' | ||
| + | |||
| + | Traditionnellement, | ||
| + | |||
| + | ===== Check in, Commit ===== | ||
| + | |||
| + | Lorsqu' | ||
| + | |||
| + | Si un utilisateur a effectué des modifications en même temps que vous mais les a // | ||
| + | |||
| + | Subversion gère de façon intelligente les conflits: si deux personnes ont touchées à des portions // | ||
| + | |||
| + | ===== Changeset ===== | ||
| + | |||
| + | L' | ||
| + | * changement de contenu des fichiers | ||
| + | * renommage/ | ||
| + | * modifications d' | ||
| + | |||
| + | Subversion rassemble l' | ||
| + | |||
| + | Les // | ||
| + | |||
| + | ====== 3. Mise en place ====== | ||
| + | |||
| + | ===== Repository ===== | ||
| + | |||
| + | Il est très simple de créer un repository, il prendra la forme d'un répertoire contenant un ensemble de fichiers variés. Il existe deux formats de repository, donc **bdb** qui devient obsolète (et ne fonctionne pas sur NFS). Exemple : | ||
| + | |||
| + | / | ||
| + | |||
| + | ===== Via les fichiers ===== | ||
| + | |||
| + | On peut se passer d'un serveur spécifique et utiliser directement les fichiers, y compris via NFS pourvu que le serveur gère correctement le //locking// (courant avec NFSv3). Dans ce cas un client peut obtenir une copie de travail très simplement : | ||
| + | |||
| + | $ svn checkout file:/// | ||
| + | $~/work$ cd projet1 | ||
| + | $~/ | ||
| + | |||
| + | Les droits d' | ||
| + | |||
| + | / | ||
| + | |||
| + | ===== Via svnserve ===== | ||
| + | |||
| + | Il s'agit du protocol réseau " | ||
| + | * en lançant explicitement le démon **svnserve** | ||
| + | * en gérant le démon **svnserve** via le superdémon //inetd// (classique) | ||
| + | |||
| + | Dans ce modèle, l' | ||
| + | * **anon-access = none** : aucun accès public, authentification requise en lecture **et** écriture | ||
| + | * **anon-access = read** : on a un accès en lecture publique, les écritures doivent être authentifiées | ||
| + | * **anon-access = write** : on a un accès lecture/ | ||
| + | |||
| + | L' | ||
| + | |||
| + | Les autorisations sont plus simples car le serveur tourne sous une identité Unix prédéfinie, | ||
| + | |||
| + | Le client peut alors obtenir en copie de travail avec: | ||
| + | |||
| + | ~/work$ svn checkout svn:// | ||
| + | |||
| + | |||
| + | Le port standard de // | ||
| + | |||
| + | ===== Via SSH ===== | ||
| + | |||
| + | Il s'agit de l' | ||
| + | |||
| + | Si le serveur à un démon SSH opérationnel, | ||
| + | |||
| + | ~/work$ svn checkout svn+ssh:// | ||
| + | |||
| + | On remarque qu'il s'agit tout simplement du tunneling du protocole // | ||
| + | |||
| + | |||
| + | | ||
| + | |||
| + | ===== Update ===== | ||
| + | |||
| + | Une fois une copie de travail obtenue, Subversion mémorise la méthode d' | ||
| + | |||
| + | ~/ | ||
| + | A dev/ | ||
| + | U dev/ | ||
| + | U dev/ | ||
| + | Updated to revision 21442. | ||
| + | |||
| + | Très souvent, on désire simplement estimer quelles mises à jour seraient effectuées (pour étudier l' | ||
| + | |||
| + | ~/ | ||
| + | |||
| + | Par défaut les fichiers et répertoires que l'on créée ne sont pas pris en charge par Subversion. Il faut explicitement les ajouter au // | ||
| + | |||
| + | ~/ | ||
| + | ~/ | ||
| + | |||
| + | ===== Commit ===== | ||
| + | |||
| + | Pour publier ses modifications, | ||
| + | |||
| + | ~/ | ||
| + | |||
| + | On peut estimer à tout moment quelles sont les modifications que l'on a effectuées par rapport à la dernière mise à jour de notre copie de travail : | ||
| + | |||
| + | ~/ | ||
| + | ~/ | ||
| + | |||
| + | ===== Conflits (update) ===== | ||
| + | |||
| + | Les conflits arrivent. Ne jamais oublier qu'ils sont en général la conséquence d'un problème de gestion de projet qui peut parfois se régler en allant voir 2 minutes son collègue. | ||
| + | |||
| + | Lors d'une mise à jour, il peut y avoir conflit entre un fichier mis à jour par vos soins et simultanément par un autre utilisateur. Dans ce cas vous verrez apparaître le fichier avec un statut **C** : | ||
| + | |||
| + | ~/ | ||
| + | C dev/ | ||
| + | |||
| + | Et dans ce cas Subversion va créer des fichier reflétant les différentes versions et vous laisse prendre la décision: NEWS.mine, NEW.r< | ||
| + | |||
| + | Quand un conflit est résolut, assurez-vous que ces fichiers temporaires de résolution de conflits sont supprimés ou demandez à Subersion : | ||
| + | |||
| + | ~/ | ||
| + | |||
| + | **Il faut toujours résoudre les conflits** avant de pouvoir continuer à travailler. | ||
| + | |||
| + | ===== Conflits (commit) ===== | ||
| + | |||
| + | Il s'agit du même problème que précédemment: | ||
| + | |||
| + | ===== Utilitaires ===== | ||
| + | |||
| + | Pour obtenir un historique des modification en un point de l' | ||
| + | |||
| + | ~/ | ||
| + | ~/ | ||
| + | |||
| + | |||
| + | Pour abandonner vos modifications et revenir à la version d'un fichier lors de votre dernier //update// : | ||
| + | |||
| + | | ||
| + | |||
| + | |||
| + | N' | ||
| + | |||
| + | ~/ | ||
| + | ~/ | ||
subversion.txt · Dernière modification : de 127.0.0.1
