Bazaar ne possède pas de fonctionnalité de sous-dépôt. [Correction: Apparemment, il existe un plugin bzr-externals, disponible sur lp: bzr-externals, mais il émule la fonction svn: externals, pas les sous-modules Git ou sous-rapports Mercurial.]
Cependant, cela peut assez facilement être contourné si vous ne voulez pas changer de système de contrôle de version.
Placez l'application et la bibliothèque dans deux répertoires, par exemple app
et lib
(je suppose ici qu'ils sont côte à côte, bien qu'ils ne le soient pas). Les deux scripts suivants, lib-snapshot
et lib-sync
peuvent ensuite être utilisés pour relier la version actuelle de l'application à une version spécifique de la bibliothèque, qui sera vérifiée dans un sous-répertoire (également appelé lib
) de la caisse app
:
lib-instantané:
#!/bin/sh
libsrc=../lib
bzr revno --tree $libsrc >libversion.txt
lib-Sync:
#!/bin/sh
ver=`cat libversion.txt`
libsrc=../lib
libdst=lib
test -d $libdst/.bzr && bzr update -q -r $ver $libdst || bzr checkout -q --lightweight -r $ver $libsrc $libdst
la version actuelle de la bibliothèque est stockée dans libversion.txt
, que vous devez mettre sous contrôle de version (de sorte que chaque version de l'application est synchronisée avec la version que vous avez testée).
Le script lib-snapshot
récupérera la version actuellement empruntée de votre bibliothèque et la stockera dans libversion.txt
. Utilisez-le lorsque vous pensez que la bibliothèque est suffisamment stable pour que votre application utilise la nouvelle version. Le script lib-sync
peut ensuite être utilisé pour mettre à jour le sous-répertoire de la bibliothèque afin de contenir la version de l'instantané; Idéalement, ce script devrait également être utilisé dans le cadre du processus de construction/déploiement. Bazaar ignore automatiquement les répertoires contenant des référentiels lors de l'ajout de fichiers, mais vous pouvez toujours ajouter le sous-répertoire de la bibliothèque à .bzrignore
afin de ne pas générer d'avertissements gênants.
Mise à jour: il semble qu'il existe un concept pour cela dans Bzr appelé "arbres imbriqués", mais pour autant que je sache, il n'est pas encore fini d'être implémenté (voir http://doc.bazaar.canonical.com/ developers/nested-trees.html). J'adorerais que quelqu'un me corrige (ou bien recommande Mercurial ou Git comme étant mieux à la manipulation de ce cas d'utilisation)! –