Si la bibliothèque B et C doivent être sous-répertoires du projet A quoi dois-je faire si je veux commencer un projet D que utilise la bibliothèque B, mais n'est pas autrement affilié à Project A tout?
Tout projet peut exister à la fois indépendamment et comme subrepository d'un autre projet en même temps. Je vais expliquer en suggérant un flux de travail.
Tout d'abord, chacun de vos projets (A, B, C) devraient avoir un dépôt béni qui est publié quelque part:
Vous pouvez exécuter hgwebdir sur votre propre serveur, ou utiliser d'un service d'hébergement Mercurial comme Bitbucket ou Kiln. De cette façon, les développeurs ont un point d'autorité central pour tirer/pousser les changements, et vous avez quelque chose à faire des sauvegardes.
Vous pouvez maintenant faire des clones de ces dépôts à travailler de deux manières différentes:
clone directement votre projet. Par exemple:
hg clone http://bitbucket.org/LachlanG/LibraryB C:\Lib\LibraryB
et/ou créer des définitions subrepository en mettant un fichier .hgsub
à la racine de ProjectA
avec le contenu suivant:
libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB
libraries/libraryC = http://bitbucket.org/LachlanG/LibraryC
Ces définitions subrepository disent Mercurial que chaque fois que le projet A est cloné, il doit également placer des clones de la bibliothèque B et de la bibliothèque C dans le dossier libraries
.
Si vous travaillez dans le projet A et validez, vos modifications dans libraries/LibraryB
et libraries/LibraryC
seront également validées. Mercurial enregistrera quelle version des bibliothèques est utilisée par le projet A dans le fichier .hgsubstate
. Le résultat est que si vous hg update
à une ancienne version du projet pour voir comment les choses ont fonctionné la semaine dernière, vous obtenez également la version correspondante de vos bibliothèques. Vous n'avez même pas besoin de créer des balises :-)
Lorsque vous modifiez le projet A dans le référentiel béni hg push
, Mercurial veille également à repousser les modifications de sous-dépôt vers leur origine. De cette façon, vous ne publiez jamais accidentellement des modifications de projet qui dépendent de modifications de bibliothèque non publiées.
Si vous préférez conserver tout en local, vous pouvez toujours utiliser ce flux de travail en utilisant des chemins relatifs au lieu des URL dans les définitions de sous-dépôt.
Où est le dossier des bibliothèques que vous mentionnez à la fin de la phrase, "Ces définitions de sous-dépôt indiquent que chaque fois que projectA est cloné, il doit également placer des clones de LibraryB et LibraryC dans le dossier libraries. – LachlanG
C'est juste un dossier, la partie gauche de: libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB est où le clone du côté droit devrait être –
@LachlanG: il apparaîtra dans la racine du ProjectA clone, par exemple 'C: \ Dev \ ProjectA \ libraries \'. –