Les sous-dépositaires fonctionnent exactement comme vous le souhaitez.
Mercurial ne met jamais automatiquement à jour le subrepo à la pointe. Il reste toujours au changeset que vous avez choisi. De la documentation :
Subrepos ne suivent pas automatiquement le dernier jeu de modifications de leur fichier d'origine. sources . Au lieu de cela, ils sont mis à jour vers le jeu de modifications qui correspond avec le jeu de modifications extrait dans le jeu de modifications de niveau supérieur. Cela permet les développeurs obtiennent toujours un ensemble cohérent de code compatible et de bibliothèques compatibles lorsqu'ils effectuent une mise à jour.
Pour obtenir ce que vous voulez, vous pouvez suivre les étapes suivantes :
echo subrepo = https://example.com/subrepo/repo/path > .hgsub
hg add .hgsub
hg clone https://example.com/subrepo/repo/path subrepo
hg -R subrepo update mytag
hg commit
Cela créera un répertoire subrepo avec le contenu du dépôt spécifié qui restera sur le serveur de l'entreprise. mytag
tant que vous ne mettez pas à jour manuellement à quelque chose d'autre !
Tous ceux qui clonent votre dépôt auront le subrepo sur le même changeset que vous (ie mytag
).
Pour information, le jeu de modifications vers lequel un sous-référencement est mis à jour est stocké dans le fichier .hgsubstate
à la racine du référentiel principal.