Manuals

Éléments externes

Il est parfois utile de construire une copie de travail à partir d'un certain nombre d'extractions différentes. Par exemple, vous pouvez vouloir que des fichiers ou des sous-répertoires différents viennent d'emplacements différents dans un dépôt, ou peut-être même de dépôts différents. Si vous voulez que chaque utilisateur ait la même organisation, vous pouvez définir les propriétés svn:externals de façon à positionner les ressources spécifiées dans les emplacements cibles souhaités.

Répertoires externes

Disons que vous avez extrait une copie de travail de /projet1 dans D:\dev\projet1. Sélectionnez le dossier D:\dev\projet1, faites un clic droit et choisissez menu WindowsPropriétés dans le menu contextuel. La boîte de dialogue de Propriétés apparaît. Allez ensuite sur l'onglet Subversion. Ici, vous pouvez positionner des propriétés. Cliquez sur Propriétés.... Dans la boîte de dialogue de propriétés, double-cliquez sur le svn:externals s'il existe déjà, ou cliquez sur le bouton Nouveau... et sélectionnez Références externes dans le menu. Pour ajouter un nouvel externe, cliquez sur Nouveau... et saisissez les informations requises dans la boîte de dialogue.

Attention

Les URLs doivent être correctement échappées pour fonctionner, par exemple vous devez remplacer chaque espace par %20.

Si vous souhaitez que le chemin local contienne des espaces ou d'autres caractères spéciaux, vous pouvez les encadrer avec des guillemets doubles, ou vous pouvez utiliser le caractère \ (antislash) comme caractère d'échappement avant un caractère spécial, comme dans le shell Unix. Bien entendu, cela signifie que vous devez utiliser / (slash) comme délimiteur de chemin. Notez que ce comportement est nouveau dans Subversion 1.6 et ne fonctionnera pas avec les versions antérieures.

Utilisez des numéros de révision explicites

Vous devriez sérieusement envisager d'utiliser des numéros de révision explicite dans toutes vos définitions d'externes, comme décrit ci-dessus. En procédant de la sorte, c'est vous qui décidez quand récupérer un nouvel instantané des informations externes, et quel instantané précis récupérer. En plus du principe de bon sens de ne pas vous laisser surprendre par des changements dans des dépôts de tierce partie que vous ne contrôlez peut-être pas, l'utilisation de numéros de révision explicite signifie aussi que si vous voulez récupérer une ancienne révision de votre copie de travail, les définitions de vos externes reviendront elles aussi à ce qu'elles étaient dans cette ancienne révision, ce qui implique aussi que les copies de travail des externes seront mises à jour pour correspondre à l'état dans lequel elles étaient, à l'époque où votre dépôt était à cette ancienne révision. Pour des projets logiciels, cela peut représenter la différence entre la réussite et l'échec d'une compilation d'un instantané ancien d'une base de code complexe.

La boîte de dialogue d'édition des propriétés svn:externals vous permet de sélectionner les externes et de les positionner explicitement à la révision HEAD de manière automatique.

Si le projet externe est dans le même dépôt, les changements que vous y faites seront inclus dans la liste de livraisons quand vous livrerez votre projet principal.

Si le projet externe est dans un dépôt différent, les changements que vous faites au projet externe seront signalés quand vous livrerez le projet principal, mais vous devrez livrer ces changements externes séparément.

Si vous utilisez des URL absolues dans la valeur de l'option svn:externals and que vous relocalisez votre copie de travail (c'est-à-dire si l'URL de votre dépôt change), alors vos références externes ne seront pas mises à jour et risquent de ne plus fonctionner.

Pour éviter de tels problèmes, à partir de la version 1.5 du client, Subversion permet d'utiliser les chemins relatifs dans les références externes. Quatre méthodes différentes de spécification d'URL relatives sont supportées. Dans les exemples suivants, considérez qu'il y a deux dépôts : un premier à l'adresse http://example.com/svn/depot-1 et un second à l'adresse http://example.com/svn/depot-2. Nous avons une extraction de http://example.com/svn/depot-1/projet/trunk dans C:\Travail et la propriété svn:externals est positionnée sur le trunk.

Relatif au répertoire parent

Ces URLs commencent toujours par la chaîne ../, par exemple :

../../widgets/toto  commun/toto-widget
            

Cela extraira http://example.com/svn/depot-1/widgets/toto dans C:\Travail\commun\toto-widget.

Notez que l'URL est relative à l'URL du répertoire ayant la propriété svn:externals, pas à l'emplacement physique où le répertoire ayant la référence externe est stocké.

Relatif à la racine du dépôt

Ces URLs commencent toujours par la chaîne ^/, par exemple :

^/widgets/toto  commun/toto-widget
            

Cela extraira http://example.com/svn/depot-1/widgets/toto dans C:\Travail\commun\toto-widget.

Vous pouvez facilement faire référence à d'autres dépôts avec le même SVNParentPath (un répertoire commun qui contient plusieurs dépôts). Par exemple :

^/../depot-2/hammers/claw  commun/claw-hammer
            

Cela extraira http://example.com/svn/depot-2/hammers/claw dans C:\Travail\commun\claw-hammer.

Relatif au schéma

Les URLs qui commencent par la chaîne // copient uniquement la partie schéma de l'URL. C'est utile quand il faut accéder au même nom d'hôte avec des schémas différents suivant l'emplacement réseau ; par exemple, les clients dans l'intranet utilisent http:// tandis que les clients externes utilisent svn+ssh://. Par exemple :

//example.com/svn/depot-1/widgets/toto  commun/toto-widget
            

Cela extraira http://example.com/svn/depot-1/widgets/toto ou svn+ssh://example.com/svn/depot-1/widgets/toto suivant la méthode utilisée pour extraire C:\Working.

Relatif au nom de domaine du serveur

Les URLs qui commencent par la chaîne / copient les parties schéma et nom d'hôte de l'URL, par exemple :

/svn/depot-1/widgets/toto  commun/toto-widget
            

Cela extraira http://example.com/svn/depot-1/widgets/toto dans C:\Travail\commun\toto-widget. Mais si vous extrayez votre copie de travail depuis un autre serveur à l'adresse svn+ssh://un.autre.miroir.net/svn/depot-1/projet1/trunk, alors la référence externe extraira svn+ssh://un.autre.miroir.net/svn/depot-1/widgets/toto.

Si nécessaire, vous pouvez aussi spécifier une révision pivot et une révision opérationnelle pour l'URL. Pour plus d'informations sur les révisions pivot et les révisions opérationnelles, veuillez lire le chapitre correspondant dans le livre de Subversion.

Important

Si vous spécifiez un sous-dossier comme dossier cible de l'externe comme dans les exemples ci-dessus, assurez-vous que tous les dossiers intermédiaires soient versionnés aussi. Dans les exemples ci-dessus, le dossier commun devrait donc être versionné !

Même si la référence externe fonctionnera correctement dans la plupart des situations quand les répertoires intermédiaires ne sont pas versionnés, il y a certaines opérations qui ne fonctionneront pas comme prévu. Les icônes superposées dans l'explorateur n'indiqueront pas non plus le bon statut.

Si vous avez besoin de plus d'informations sur la façon dont TortoiseSVN manipule les propriétés, lisez la section intitulée « Configuration des projets ».

Pour découvrir des méthodes différentes d'accéder aux sous-projets communs, lisez la section intitulée « Inclure un sous-projet commun ».

Fichiers externes

À partir de Subversion 1.6, vous pouvez ajouter à votre copie de travail des références externes relatives à des fichiers en utilisant la même syntaxe que pour les dossiers. Il y a néanmoins quelques limitations.

  • Le chemin vers le fichier externe doit être un fils immédiat du dossier où vous avez positionné la propriété svn:externals.

  • L'URL pour un fichier externe doit se trouver dans le même dépôt que l'URL dans laquelle le fichier externe sera inséré ; les fichiers externes inter-dépôt ne sont pas supportés.

Par beaucoup d'aspects, les fichiers externes se comportent comme n'importe quel autre fichier versionné. Néanmoins, ils ne peuvent pas être déplacés ou supprimés avec les commandes standard ; il faut passer par la modification de la propriété svn:externals.

Création d'externe via glisser-déposer

Si vous avez déjà une copie de travail des fichiers ou des dossiers que vous voulez inclure en tant que références externes dans une autre copie de travail, vous pouvez simplement les ajouter en faisant un glisser-déposer depuis l'explorateur Windows.

Faites simplement glisser avec le bouton droit le fichier ou le dossier depuis une copie de travail jusqu'à l'emplacement où vous voulez les inclure en tant que références externes. Un menu contextuel apparaît quand vous relâchez le bouton de la souris. Si vous cliquez sur l'élément SVN Ajouter comme référence externe ici de ce menu contextuel, la propriété svn:externals est ajoutée automatiquement. Tout ce qu'il vous reste à faire après cela est de livrer les changements de propriété et de mettre à jour pour que ces références externes soient incluses correctement dans votre copie de travail.

TortoiseSVN homepage