svnDémarrer avec svn

Remarques

Apache Subversion (SVN) est un système de contrôle de version open source universel et centralisé. Subversion est actuellement un projet sous Apache Software Foundation (ASF) et est sous licence Apache, Version 2.0 .

Subversion est conçu pour gérer et contrôler les fichiers et les répertoires et suivre les modifications qui leur sont apportées; il agit comme une horloge et un outil de gestion fiables pour les projets développés en collaboration. Il peut facilement répondre aux questions standard auxquelles tout système de contrôle de version doit répondre de manière fiable. Par exemple,

  • A quoi ressemblait le projet / fichier FOO le 12/12/2012?
  • Quels changements ont été introduits par USERNAME ou le 20/12/2012?
  • Qui a modifié la chaîne depuis la dernière révision?
  • et bien plus encore.

Versions

Version Quoi de neuf? Date de sortie
1.9.x Nombreuses améliorations de la convivialité et des performances 2015-08-05
1.8.x Amélioration du suivi des renommées, des fusions de réintégration automatique, des propriétés versionnées héritées, de l'outil de résolution des conflits intégré 2013-06-18
1.7.x Réécriture complète de la bibliothèque de la copie de travail, utilisation améliorée du protocole HTTP 2011-10-11
1,6.x Identification des conflits d'arborescence, résolution interactive des conflits améliorée, prise en charge d'URL relatives aux pensions 2009-03-20
1.5.x Suivi des svn:mergeinfo et des branchements ( svn:mergeinfo ), résolution interactive des conflits de fichiers, svn:mergeinfo rares, syntaxe améliorée de svn:externals 2008-06-19
1.4.x Outil svnsync pour la réplication de référentiel, bibliothèque de copie de travail nouvelle et améliorée 2006-09-10
1.3.x Journalisation de haut niveau des opérations utilisateur côté serveur, amélioration des performances 2005-12-30
1.2.x Prise en charge du modèle de verrouillage-modification-déverrouillage (verrouillage), de la synchronisation automatique DAV, FSFS est utilisé par défaut pour les nouveaux référentiels 2005-05-21
1.1.x Nouveau backend de référentiel (FSFS), versioning de lien symbolique 2004-09-29
1.0.x Publication publique initiale 2004-02-23

Apache Subversion 1.9.x est actuellement la dernière et meilleure version de SVN entièrement prise en charge. Subversion 1.8.x est partiellement pris en charge. Subversion 1.7.x et les versions antérieures ne sont plus prises en charge.

Installation et configuration initiale

Installez le client svn pour commencer à collaborer sur le projet qui utilise Subversion comme système de contrôle de version.

Pour installer Subversion, vous pouvez le créer vous-même à partir d'une version de code source ou télécharger un package binaire pré-conçu pour votre système d'exploitation. La liste des sites sur lesquels vous pouvez obtenir un client Subversion compilé ( svn ) pour différents systèmes d'exploitation est disponible sur la page des packages binaires officiels . Si vous souhaitez compiler le logiciel par vous-même, prenez la source sur la page du code source .

Avec Subversion, vous n'êtes pas limité à utiliser uniquement le client de ligne de commande svn standard. Il existe des clients graphiques remarquables Subversion pour divers systèmes d'exploitation et la plupart des IDE offrent aujourd'hui une intégration robuste avec SVN dès la sortie de la boîte ou via des plugins. Pour la liste des clients graphiques, consultez la page Wikipedia: https://en.wikipedia.org/wiki/Comparison_of_Subversion_clients .

Juste après avoir installé le client, vous devriez pouvoir l'exécuter en lançant la commande svn . Vous devriez voir ce qui suit:

$ svn
Type 'svn help' for usage.

Tout est principalement prêt. Vous devez maintenant créer un espace de travail local appelé copie de travail qui sera connecté au référentiel central distant. En d'autres termes, vous allez acheter une copie de travail . Vous allez utiliser les données versionnées à l'aide de la copie de travail et pouvez publier vos modifications (appelées validation dans SVN) afin que les personnes travaillant sur le même projet puissent les voir et bénéficier de vos modifications. Pour récupérer ultérieurement les futures modifications apportées par d'autres utilisateurs dans le référentiel, vous devez mettre à jour votre copie de travail . Ces opérations de base sont abordées dans d'autres exemples.

Vérification d'une copie de travail

Pour commencer à apporter des modifications aux données du projet, vous devez obtenir une copie locale du projet versionné. Utilisez le client de ligne de commande svn ou votre client SVN préféré (TortoiseSVN, par exemple). Votre copie locale du projet s'appelle une copie de travail dans Subversion et vous l'obtenez en lançant la commande svn checkout <URL><URL> est une URL de référentiel. par exemple

$ svn checkout https://svn.example.com/svn/MyRepo/MyProject/trunk

Vous pouvez également utiliser svn co <URL> comme raccourci pour extraire une copie locale.

Par conséquent, vous obtiendrez une copie de travail du /trunk d'un projet appelé MyProject qui réside dans le référentiel MyRepo. La copie de travail sera située dans un répertoire appelé trunk sur votre ordinateur par rapport au répertoire dans lequel vous avez émis la commande.

Si vous souhaitez avoir un nom différent pour votre copie de travail, vous pouvez l'ajouter comme paramètre à la fin de la commande. par exemple

$ svn checkout https://svn.example.com/svn/MyRepo/MyProject/trunk MyProjectSource

Cela créera une copie de travail appelée MyProjectSource .

Notez qu'au lieu d'extraire le tronc, vous pouvez extraire une branche, un répertoire privé ou une balise (en supposant qu'ils existent déjà dans le référentiel); vous pouvez avoir un nombre illimité de copies de travail locales sur votre machine.

Vous pouvez également obtenir la copie de travail de l'ensemble du référentiel MyRepo. Mais vous devriez vous abstenir de le faire. De manière générale, vous n'avez pas besoin d'une copie de travail de l'ensemble du référentiel pour votre travail car votre copie de travail peut être instantanément basculée vers une autre branche / balise de développement / peu importe. De plus, le référentiel Subversion peut contenir un certain nombre de projets (non) liés et il est préférable de disposer d'une copie de travail dédiée pour chacun d'eux, et non d'une copie de travail unique pour tous les projets.

Exportation des données versionnées (téléchargement simple)

Si vous souhaitez obtenir les données du projet versionné, mais que vous n'avez besoin d'aucune des fonctionnalités de contrôle de version offertes par Subversion, vous pouvez exécuter la commande svn export <URL> . Voici un exemple:

$ svn export https://svn.example.com/svn/MyRepo/MyProject/trunk

En conséquence, vous obtiendrez l'exportation de données du projet, mais contrairement à une copie de travail, vous ne pourrez pas exécuter les commandes svn . L'exportation est un simple téléchargement des données.

Si quelque temps plus tard vous souhaitez convertir les données téléchargées en une copie de travail entièrement fonctionnelle, exécutez svn checkout <URL> dans le répertoire où vous avez exécuté l'exportation.

Mise à jour d'une copie de travail

Vous n'êtes pas la seule personne travaillant sur le projet, n'est-ce pas? Cela signifie que vos collègues apportent également des modifications aux données du projet. Pour rester à jour et récupérer les modifications validées par d’autres utilisateurs, vous devez exécuter la commande svn update dans votre copie de travail. Par conséquent, votre copie de travail sera synchronisée avec le référentiel et téléchargera les modifications apportées par vos collègues.

Un raccourci pour svn update est svn up .

C'est une règle d'exécuter svn update avant de valider vos modifications.

Apporter des modifications à votre copie de travail locale

La copie de travail (WC) est votre espace de travail local et privé que vous utilisez pour interagir avec le référentiel central Subversion. Vous utilisez la copie de travail pour modifier le contenu de votre projet et récupérer les modifications validées par d'autres.

La copie de travail contient les données de votre projet et ressemble à un répertoire normal de votre système de fichiers local, mais avec une différence majeure: la copie de travail suit l'état et les modifications des fichiers et des répertoires. Vous pouvez penser à la copie de travail comme à un répertoire régulier avec une version de contrôle de version ajoutée par un répertoire de métadonnées .svn masqué à sa racine.

La plupart du temps, vous allez apporter des modifications aux données du projet en modifiant le contenu de la copie de travail. Dès que vous êtes satisfait des modifications et que vous les avez examinées attentivement, vous êtes prêt à les publier dans le référentiel central.

Vous pouvez effectuer des actions avec les données de votre projet dans la copie de travail, mais les opérations impliquant la copie, le déplacement, le changement de nom et la suppression doivent être effectuées à l'aide des commandes svn correspondantes:

  • Modification des fichiers existants Modifiez les fichiers comme vous le faites habituellement en utilisant votre traitement de texte, éditeur graphique, logiciel de montage audio, IDE, etc. préférés. Dès que vous enregistrez les modifications sur le disque, Subversion les reconnaît automatiquement.

  • Ajout de nouveaux fichiers Placez les nouveaux fichiers dans la copie de travail et Subversion les reconnaîtra comme non versionnées . Il ne démarrera pas automatiquement le suivi des nouveaux fichiers, sauf si vous exécutez la commande svn add :

    svn add foo.cs
    
  • Déplacement de fichiers et de répertoires . Déplacer des fichiers et des répertoires en utilisant la commande svn move :

    svn move foo.cs bar.cs
    
  • Renommer des fichiers et des répertoires . Renommez les fichiers et répertoires en utilisant la commande svn rename :

    svn rename foo.cs bar.cs
    

    REMARQUE: la commande svn rename est un alias de la commande svn move .

  • Copier des fichiers et des répertoires . Copier des fichiers et des répertoires en utilisant la commande svn copy :

    svn copy foo.cs bar.cs
    
  • Suppression de fichiers et de répertoires . Supprimez les fichiers et répertoires à l'aide de la commande svn delete :

    svn delete foo.cs
    
  • Vérification de l'état des fichiers et des répertoires dans la copie de travail . Examinez vos modifications en utilisant la commande svn status (ou svn st en abrégé):

    svn status
    

    IMPORTANT: vérifiez toujours vos modifications avant de les engager. Cela vous aidera à éviter de commettre des changements inutiles ou non pertinents.

  • Inverser les changements . Rétablissez vos modifications à l'aide de la commande svn revert :

    svn revert foo.c
    
  • Rétablir tous les changements : à partir de la racine du référentiel:

    svn revert -R .
    

    IMPORTANT: Les modifications non validées seront perdues pour toujours. Vous ne pourrez pas récupérer les modifications annulées. Utilisez svn revert avec prudence! Si vous souhaitez conserver les modifications mais que vous devez revenir, sauvegardez-les dans un patch. Voir l'exemple de la création et de l'application d'un patch.

Commettre vos modifications locales dans le référentiel

Pour publier les modifications apportées dans votre copie de travail, exécutez la commande svn commit .

IMPORTANT: Révisez vos modifications avant de les engager! Utilisez svn status et svn diff pour examiner les modifications. Assurez-vous également que vous êtes dans le bon chemin avant d'effectuer une validation. Si vous avez mis à jour de nombreux fichiers dans différents répertoires, vous devez être au niveau approprié pour les inclure tous sous votre emplacement.

Voici un exemple de la commande commit:

svn commit -m "My Descriptive Log Message"

Sinon, svn ci est le raccourci pour svn commit

Notez l'option -m (--message) . Les bons messages de validation aident les autres à comprendre pourquoi une validation a été faite. De plus, côté serveur, il est possible d' appliquer des messages non vides , et même de faire en sorte que chaque message de validation mentionne un ticket existant dans votre système de suivi des bogues.

Vérification d'une copie de travail lors d'une révision spécifique

Pour obtenir la version 5394, utilisez:

svn co --revision r5394 https://svn.example.com/svn/MyRepo/MyProject/trunk

Ou la version plus courte:

svn co -r 5394 https://svn.example.com/svn/MyRepo/MyProject/trunk

Ou en utilisant des révisions indexées:

svn co https://svn.example.com/svn/MyRepo/MyProject/trunk@5394

Si cette option est déjà extraite, vous pouvez utiliser la commande update pour déplacer une vers une révision particulière en procédant comme suit:

svn up -rXXX

Utiliser un référentiel protégé par mot de passe

Un référentiel Subversion peut être configuré pour que certains contenus ou commandes ne soient accessibles qu'à certains utilisateurs. Pour accéder à ce contenu restreint, vous devez spécifier un nom d'utilisateur et un mot de passe.

Votre nom d'utilisateur et votre mot de passe peuvent être spécifiés directement dans la commande:

$ svn checkout https://svn.example.com/MyRepo/trunk --username JoeUser --password topsecret

Malheureusement, votre mot de passe apparaît en texte brut sur la console. Pour éviter ce problème de sécurité possible, spécifiez un nom d'utilisateur, mais pas un mot de passe. Faire ceci provoquera une invite de mot de passe à apparaître, vous permettant d'entrer votre mot de passe sans l'exposer:

$ svn checkout https://svn.example.com/MyRepo/trunk --username JoeUser
Password for 'JoeUser':

Si vous ne fournissez aucune information d'authentification, Subversion vous demandera à la fois le nom d'utilisateur et le mot de passe:

$ svn checkout https://svn.example.com/MyRepo/trunk
Username:  JoeUser
Password for 'JoeUser':

Bien que la première méthode soit moins sécurisée, elle est souvent observée dans les scripts automatisés, car il est difficile pour de nombreux types de script de fournir des informations à une invite interactive.

Remarque : les commandes qui ne fonctionnent que sur votre copie de travail (comme la revert ou le status ) ne nécessiteront jamais de mot de passe, mais uniquement des commandes nécessitant une communication avec le serveur de référentiel.

Création et application de patchs

Un correctif est un fichier qui montre les différences entre deux révisions ou entre votre référentiel local et la dernière révision pointée vers votre référentiel.

Pour partager ou enregistrer un correctif de vos modifications locales non validées, soit pour une évaluation par les pairs, soit pour les appliquer ultérieurement, procédez comme suit:

svn diff > new-feature.patch

Pour obtenir un correctif à partir des différences entre deux révisions:

svn diff -r NEWER_REVISION:OLDER_REVISION > feature.patch

Pour appliquer un patch, lancez:

svn patch new-feature.patch

Pour appliquer le correctif avec succès, vous devez exécuter la commande à partir du même chemin où le correctif a été créé.

Révision des journaux

L'exécution de svn log vous montrera tous les messages de validation, vous souhaiterez probablement revoir uniquement certaines révisions.

  • Voir les n dernières révisions:

    svn log -n

  • Afficher une révision spécifique:

    svn log -c rXXX

  • Affichez les chemins concernés:

    svn log -v -c rXXX

Rétablir ou annuler un fichier

Pour restaurer un fichier à la dernière version de svn mise à jour, c.-à-d. Annuler les modifications locales, vous pouvez utiliser revert :

svn revert file

Pour restaurer un fichier dans une version antérieure (révision XXX), utilisez la update :

svn update -r XXX file

Attention : dans les deux cas, vous perdrez toutes les modifications locales du fichier car elles seront écrasées.


Pour afficher uniquement l'ancienne version d'un fichier utiliser un cat :

svn cat -r XXX file

Et pour voir les différences avec votre version locale du fichier:

svn diff -r XXX file