Inclure un sous-projet commun

Sometimes you will want to include another project within your working copy, perhaps some library code. There are at least 4 ways of dealing with this.

Utiliser svn:externals

Définit la propriété svn:externals sur un dossier de votre projet. Cette propriété consiste en une ou plusieurs lignes; chaque ligne comporte le nom d'un sous-dossier que vous voulez utiliser comme dossier d'extraction pour du code commun et l'URL du dépôt que vous voulez extraire là. Pour des détails plus complets, référez-vous à la section intitulée « Eléments externes ».

Livre le nouveau dossier. Maintenant quand vous mettrez à jour, Subversion récupérera une copie de ce projet de son dépôt vers votre copie de travail. Les sous-dossiers seront créés automatiquement au besoin. Chaque fois que vous mettrez à jour votre copie de travail principale, vous recevrez aussi la dernière version de tous les projets externes.

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.

Parmi les trois méthodes décrites, c'est la seule qui n'a pas besoin d'installation côté client. Une fois que les projets externes sont spécifiés dans les propriétés du dossier, tous les clients recevront les dossiers remplis lors de la mise à jour.

Utiliser une copie de travail nichée

Créez un nouveau dossier dans votre projet qui contiendra le code commun, mais ne l'ajoutez pas à Subversion.

Sélectionnez TortoiseSVNExtraire pour le nouveau dossier et extrayez une copie du code commun. Vous avez maintenant une copie de travail séparée emboîtée dans votre copie de travail principale.

Les deux copies de travail sont indépendantes. Quand vous livrez des changements au parent, les changements à la CdT emboîtée sont ignorés. De même quand vous mettez à jour le parent, la CdT emboîtée n'est pas mise à jour.

Utiliser un emplacement relatif

If you use the same common core code in several projects, and you do not want to keep multiple working copies of it for every project that uses it, you can just check it out to a separate location which is related to all the other projects which use it. For example:

C:\Projects\Proj1
C:\Projects\Proj2
C:\Projects\Proj3
C:\Projects\Common
        

and refer to the common code using a relative path, e.g. ..\..\Common\DSPcore.

If your projects are scattered in unrelated locations you can use a variant of this, which is to put the common code in one location and use drive letter substitution to map that location to something you can hard code in your projects, e.g. Checkout the common code to D:\Documents\Framework or C:\Documents and Settings\{login}\My Documents\framework then use

SUBST X: "D:\Documents\framework"
        

to create the drive mapping used in your source code. Your code can then use absolute locations.

#include "X:\superio\superio.h"
        

Cette méthode ne fonctionnera que dans un environnement tout PC et vous devrez documenter les affectations de disque requises pour que votre équipe sache où se trouvent ces fichiers mystérieux. Cette méthode est strictement utilisée dans des environnements de développement fermés et n'est pas recommandée pour une utilisation générale.

Ajouter le projet au référentiel

The maybe easiest way is to simply add the project in a subfolder to your own project working copy. However this has the disadvantage that you have to update and upgrade this external project manually.

To help with the upgrade, TortoiseSVN provides a command in the explorer right-drag context menu. Simply right-drag the folder where you unzipped the new version of the external library to the folder in your working copy, and then select Context MenuSVN Vendorbranch here. This will then copy the new files over to the target folder while automatically adding new files and removing files that aren't in the new version anymore.