Eléments externes

Il est parfois utile de construire une copie de travail faite 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 disposition, 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

Let's say you check out a working copy of /project1 to D:\dev\project1. Select the folder D:\dev\project1, right click and choose Windows MenuProperties from the context menu. The Properties Dialog comes up. Then go to the Subversion tab. There, you can set properties. Click Properties.... In the properties dialog, either double click on the svn:externals if it already exists, or click on the New... button and select externals from the menu. To add a new external, click the New... and then fill in the required information in the shown dialog.

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 doubles cotes, ou vous pouvez utiliser le caractère \ (backslash) comme un type de caractère shell Unix pour distinguer tout caractère spécial qu'il précède. 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.

Utiliser des numéros de révision explicites

You should strongly consider using explicit revision numbers in all of your externals definitions, as described above. Doing so means that you get to decide when to pull down a different snapshot of external information, and exactly which snapshot to pull. Besides the common sense aspect of not being surprised by changes to third-party repositories that you might not have any control over, using explicit revision numbers also means that as you backdate your working copy to a previous revision, your externals definitions will also revert to the way they looked in that previous revision, which in turn means that the external working copies will be updated to match the way they looked back when your repository was at that previous revision. For software projects, this could be the difference between a successful and a failed build of an older snapshot of your complex code base.

The edit dialog for svn:externals properties allows you to select the externals and automatically set them explicitly to the HEAD revision.

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.

If the external project is in a different repository, any changes you make to the external project will be shown or indicated when you commit the main project, but you have to commit those external changes separately.

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

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écifications d'URL relatives sont supportées. Dans les exemples suivants, considérez qu'il y a deux dépôts: un premier ici http://exemple.com/svn/repos-1 et un second là http://exemple.com/svn/repos-2. Nous avons une extraction de http://exemple.com/svn/repos-1/project/trunk dans C:\Working et la propriété svn:externals est activée sur le répertoire trunk.

Relatif au répertoire parent.

These URLs always begin with the string ../ for example:

../../widgets/foo  common/foo-widget
            

This will extract http://example.com/svn/repos-1/widgets/foo into C:\Working\common\foo-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

These URLs always begin with the string ^/ for example:

^/widgets/foo  common/foo-widget
            

This will extract http://example.com/svn/repos-1/widgets/foo into C:\Working\common\foo-widget.

You can easily refer to other repositories with the same SVNParentPath (a common directory holding several repositories). For example:

^/../repos-2/hammers/claw  common/claw-hammer
            

This will extract http://example.com/svn/repos-2/hammers/claw into C:\Working\common\claw-hammer.

Relatif au thème

URLs beginning with the string // copy only the scheme part of the URL. This is useful when the same hostname must the accessed with different schemes depending upon network location; e.g. clients in the intranet use http:// while external clients use svn+ssh://. For example:

//example.com/svn/repos-1/widgets/foo  common/foo-widget
            

This will extract http://example.com/svn/repos-1/widgets/foo or svn+ssh://example.com/svn/repos-1/widgets/foo depending on which method was used to checkout C:\Working.

Relatif au nom de domaine du serveur

URLs beginning with the string / copy the scheme and the hostname part of the URL, for example:

/svn/repos-1/widgets/foo  common/foo-widget
            

This will extract http://example.com/svn/repos-1/widgets/foo into C:\Working\common\foo-widget. But if you checkout your working copy from another server at svn+ssh://another.mirror.net/svn/repos-1/project1/trunk then the external reference will extract svn+ssh://another.mirror.net/svn/repos-1/widgets/foo.

You can also specify a peg and operative revision for the URL if required. To learn more about peg and operative revisions, please read the corresponding chapter in the Subversion book.

Important

If you specify the target folder for the external as a subfolder like in the examples above, make sure that all folders in between are versioned as well. So for the examples above, the folder common should be versioned!

While the external will work in most situations properly if folders in between are not versioned, there are some operations that won't work as you expect. And the status overlay icons in explorer will also not show the correct status.

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

A partir de Subversion 1.6 vous pouvez ajouter 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.

  • The path to the file external must be a direct child of the folder where you set the svn:externals property.

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

Par beaucoup d'aspects, les fichiers en référence externe 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 standards; il faut passer par la modification de la propriété svn:externals.

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

If you already have a working copy of the files or folders you want to include as externals in another working copy, you can simply add those via drag and drop from the windows explorer.

Simply right drag the file or folder from one working copy to where you want those to be included as externals. A context menu appears when you release the mouse button: SVN Add as externals here if you click on that context menu entry, the svn:externals property is automatically added. All you have to do after that is commit the property changes and update to get those externals properly included in your working copy.