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.
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 → 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 . 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 et sélectionnez Références externes
dans le menu. Pour ajouter un nouvel externe, cliquez sur et saisissez les informations requises dans la boîte de dialogue.
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.
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.
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é.
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
.
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
.
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.
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 ».
À 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
.
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 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.