2010-06-25 4 views
3

Je veux faire l'équivalent de svn export REMOTE_URL avec un référentiel mercurial. Ce que je veux à la fin est un instantané non-versionné du dépôt à l'URL distante, mais sans cloner tous les changesets sur ma machine locale.Quelle est la meilleure façon d'obtenir une copie de la pointe d'un dépôt de mercurial?

Je souhaite également pouvoir spécifier une balise dans le référentiel distant pour en choisir une. Si ce n'est pas évident, je construis un outil de gestion des versions qui tire d'un référentiel canonique pour construire un fichier de version, et il est lent en ce moment car certains projets ont de gros fichiers binaires à plusieurs versions validés.

Est-ce possible? Comment on s'y prendrait?

Répondre

3

Il est généralement plus facile (si le HG distant utilise l'interface hgweb) de simplement visiter le repo dans votre navigateur et de télécharger un fichier .tgz/.zip/.bz2 de la révision de l'astuce. Vous verrez les liens si le HG distant le supporte.

Si vous voulez le référentiel, vous avez besoin de toutes les révisions qui sont entrées dans le tip actuel pour qu'il soit fonctionnel.

Il y a des options à hg clone qui vous permettent d'aller chercher un dépôt jusqu'à une certaine révision, mais aucun (que je ne pouvais trouver) qui vous permettent d'obtenir juste la dernière révision. Ce que vous demandez essentiellement, c'est un instantané du repo.

Edit: pour obtenir un aperçu

hg clone http[s]://url.to.repo repo.hg 
cd repo.hg 
hg archive ../repo-snapshot 
cd .. 
rm -rf repo.hg 

L'instantané est maintenant en instantané des prises en pension.

Oui, cela implique de cloner le repo en premier, c'est pourquoi j'ai suggéré de voir si le hgweb distant supporte à la volée les téléchargements d'une révision particulière. Si c'est le cas, votre problème est résolu avec quelque chose comme curl ou wget au lieu de HG.

Si ce n'est pas le cas, il est bon de laisser le dépôt original 'vivre' puisque vous pouvez le mettre à jour plus tard via hg pull, puis créer un autre instantané d'une future version. Cela évite d'avoir à recommencer à zéro lors du clonage, en particulier pour les grands dépôts avec beaucoup de changements.

En outre, Linux centré, mais vous obtenez l'essentiel. Bien sûr, remplacez http [s] avec le protocole désiré si nécessaire.

+0

C'est exactement ce que je veux; un instantané du référentiel distant, sur un hachage de balise/révision particulier. Je n'ai aucun désir pour le référentiel lui-même; ça ne va jamais être dans le paquet de sortie :) –

+0

@Chris R - voir mes modifications. Idéalement, le hgweb distant supporte à la volée le téléchargement d'instantanés de toute révision. Sinon ... vous devez faire un clone jetable pour en créer un. –

+0

Je les vois; Je cherche spécifiquement à éviter le clone local, donc c'est un non-starter. Le téléchargement d'archive http semble le plus probable. –

1

Y a-t-il une raison pour laquelle vous ne pouvez pas conserver un miroir (mis à jour en arrière-plan, mais souvent souhaité) du référentiel distant sur votre machine locale, alors l'outil de gestion des versions sur votre machine locale cloner si nécessaire? Si vous vous souciez de la réactivité de l'utilisateur, et non de la bande passante/du stockage total consommés, cela décale la partie "lente" là où vous ne la verrez pas. Tim Post a noté que si l'interface CGI de hgweb est disponible, vous pouvez la configurer pour extraire les archives compressées et les décompresser (et l'interface est suffisamment cohérente pour que vous puissiez les utiliser via wget), mais si vous ne le faites pas, 't, noyau Mercurial n'a pas beaucoup d'outils pour vous aider, et les développeurs ont exprimé une opposition à essayer de transformer Mercurial en un client de type rsync général.

Si vous n'êtes pas peur de jouer avec des add-ons non officielles, vous pourriez avoir un regard sur le FTP Extension. Cela vous forcera à pousser du serveur, cependant.

+0

hgweb pourrait être le ticket, même si je suis sûr que nous avions prévu d'utiliser le modèle d'accès ssh. Néanmoins, cela pourrait s'avérer être le meilleur moyen de le faire. Merci, je vais devoir voir si ça peut marcher. –

Questions connexes