2013-05-30 6 views
0

Je travaille sur un couple de projets PHP. L'une est une application, l'autre est une bibliothèque qui prend en charge cette application. Auparavant, j'ai utilisé une configuration mercurielle où la bibliothèque était un sous-répertoire dans le référentiel d'applications. Cela signifiait que toute modification apportée au code de la bibliothèque était validée dans le sous-répertoire et pouvait être fusionnée avec le projet de la bibliothèque séparément (de manière à séparer l'historique du code de la bibliothèque de l'application).Bzr sous-dépôt pour la bibliothèque

J'ai eu du mal à trouver des exemples ou des documents sur la façon de le faire avec Bazaar (mon DVCS actuel de choix). Quelqu'un at-il essayé/fait? Cela vaut-il la peine de le faire en Bzr, ou devrais-je peut-être regarder un autre système DVCS qui répond mieux à ce besoin?

+0

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)! –

Répondre

1

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.