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 [2009/03/14 21:38] – root | subversion [Date inconnue] (Version actuelle) – supprimée - modification externe (Date inconnue) 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.1237066684.txt.gz · Dernière modification : de root
