2010-11-17 13 views
22

Je suis nouveau à Mercurial HG. Mes amis ont créé un repo et je vais l'utiliser. J'ai installé TortoiseHG et essayé d'obtenir le dernier code. J'ai trouvé que lors de l'utilisation de l'opération de clonage, il va tirer tout le code à mon local, y compris les histoires (Ai-je raison?). Ce n'est pas nécessaire pour moi. Je veux juste avoir le dernier code. Y a-t-il une opération pour cela?Lorsque vous utilisez Mercurial HG, comment obtenir simplement le dernier code?

+0

Merci à tous vos gars! Bien que je doive encore cloner tout le repo, j'en apprends plus sur Mercurial HG à chaque réponse! – DeepNightTwo

Répondre

18

En bref, non. En un peu plus de temps: Mercurial ne supporte pas encore les clones "peu profonds" où vous n'avez qu'une partie de l'histoire. Donc, chaque fois que vous clonez, vous tirez dans le dépôt entier avec tous les changesets. En outre, contrairement à Subversion, il n'existe aucun moyen de créer un clone "étroit" où vous ne pouvez extraire qu'une partie d'un référentiel. Par exemple, si un référentiel contient des répertoires foo/ et bar/, il est impossible d'obtenir uniquement le répertoire bar/. En d'autres termes, Mercurial fonctionne toujours sur des instantanés à l'échelle du projet.

+1

Il semble que l'histoire est une chose importante pour Mercurial. Et cela inclura toujours toute l'histoire. – DeepNightTwo

+4

J'ai changé la terminologie dans la réponse à ce que nous utilisons normalement dans Mercurial: nous parlons de clones "peu profonds" quand vous ne recevez qu'une partie de l'histoire et des clones "étroits" quand vous obtenez seulement une partie de l'arborescence. –

+3

Les gens ont fait des prototypes pour des clones peu profonds, mais ils ne font pas encore partie de la distribution principale. –

4

Une fois que vous avez cloné un référentiel, pour obtenir le code de la "pointe" (la dernière version de la branche actuelle - la version par défaut si non précisée), vous avez juste besoin de update.

Vous avez une action de mise à jour dans TortoiseHG. Une fois cela fait, vous pouvez regarder les fichiers dans le dossier.

Si vous vouliez un autre état du référentiel (une ancienne version, ou un ancien état étiqueté), alors il s'agit toujours de la commande update, avec d'autres paramètres (voir les docs ou l'interface TortoiseHG).

+0

Merci pour ce que vous m'avez dit! – DeepNightTwo

3

Si vous voulez seulement le dernier code, et que vous n'avez pas l'intention de faire quoi que ce soit lié au dépôt, comme commit, ou diff aux anciennes versions, ou autre, alors cela dépend de l'endroit où vous avez obtenu le code de et comment. S'il utilise l'un des services d'hébergement, comme bitbucket, il y a généralement un lien de téléchargement qui vous donne juste le code source.

Par exemple, si vous allez here, il y a un lien « Get source » et à droite qui vous donne un peu de choix dans le format de fichier (zip ou autres joyeusetés.)

Si vous avez les fichiers quelque part Sinon, vous devez explorer l'interface dont vous les avez tirés. Essayez simplement de coller le lien que vous avez cloné dans votre navigateur et de voir ce que vous obtenez.

+0

Je dois effectuer des opérations telles que l'archivage et l'ajout de fichiers. Pourtant, je traite Mercurial comme SVN ... – DeepNightTwo

2

Bien sûr. Clonez le référentiel, puis supprimez le sous-répertoire .hg.

+0

Le problème est qu'il restait beaucoup de temps pour cloner tout le repo. On dirait qu'il faut ... – DeepNightTwo

+0

En fait pas une mauvaise solution de contournement. – Marian

5

La meilleure façon d'obtenir ce que vous voulez:

hg archive [destination folder] 
0

Pour tirer un sous-ensemble de changesets, spécifiez une ou plusieurs révisions identificateurs avec -r/- rev ou branches avec -b/--branche. Le clone résultant contiendra uniquement les changesets spécifiés et leurs ancêtres.

par exemple. hg clone -b NeededBranch http://example.com/myRepo

Mercurial manual

+1

La question était de savoir comment cloner sans tirer l'histoire, en tirant les ancêtres va encore tirer beaucoup d'histoire dans la plupart des cas d'utilisation. –

+0

@YaakovKuperman: Il se pourrait que ce soit OK pour tirer l'histoire une fois, si à partir de là l'histoire est coupée. Mais vous avez raison, dans la plupart des cas, cela ne réduira pas beaucoup la taille totale de l'histoire. Cette technique est plus utile pour gérer les situations de conflit de fusion désordonnées. – Yitz

2

je pourrais être un peu en retard, mais en réalité, il est possible d'oublier un peu d'histoire avec Mercurial. Vous avez juste besoin d'activer l'extension convert de votre fichier mercurial.ini ou.fichier hgrc.

[extensions] 
hgext.convert= 

Maintenant, vous pouvez utiliser l'extension convert pour "cloner" uniquement les changesets à partir de la révision spécifiée. Notez simplement que ce n'est pas la même opération avec hg clone. C'est pourquoi le référentiel source doit être un référentiel local. Par exemple, si nous avons un dépôt dans le dossier MyProject et nous voulons oublier toutes les modifications effectuées avant la révision 100. Nous pouvons utiliser la commande suivante:

hg convert --config convert.hg.startrev=[100] MyProject MyShrinkedProject 

Si vous allez utiliser ce référentiel sur un rétrécis « central serveur "N'oubliez pas de prendre soin de ce que tout le monde clone avant de continuer à travailler. Les référentiels ne sont plus compatibles entre eux.

+0

Cette réponse suppose qu'il est correct d'obtenir un clone complet une seule fois, et à partir de ce moment, n'utilisez qu'un clone partiel. C'est une bonne solution si vous avez besoin d'une partie de l'historique, mais revenez seulement à une certaine révision. Si vous voulez commencer à zéro sans histoire du tout: 1. Commencez par un clone complet. 2. Exécutez hg manifeste et enregistrez le résultat dans un fichier. 3. Supprimez le dossier .hg. 4. Exécutez hg init. 5. Exécutez hg add sur la liste des fichiers sauvegardés. – Yitz