52 votes

Supprimer l'historique de Mercurial

Existe-t-il un moyen de supprimer les anciens ensembles de modifications d'une base de données dans mercurial? J'ai un référentiel de 60 Go, ce qui rend la création d'un clone très pénible. Je voudrais tout couper avant une certaine date et mettre l'énorme base de données de côté pour recueillir la poussière.

48voto

Gerd Klima Points 903

Il n'est pas simple / moyen recommandé de le faire directement à un référentiel existant.

Vous pouvez cependant "convertir" votre mercurial repo à un nouveau mercurial repo et choisir une révision de l'histoire partir via le convertir.hg.startrev option

hg convert --config convert.hg.startrev=1234 <source-repository> <new-repository-name>

Le nouveau repo contient tous les éléments de l'original repo moins l'histoire antérieure à la première révision.

Mise en garde: Le nouveau repo aura complètement nouvelle révision de l'IDs, c'est à dire qu'il n'est en aucune façon liée à l'origine des pensions. Après la création du nouveau repo chaque développeur a pour cloner le repo et nouvelles de supprimer leurs clones à partir de l'original repo.

Je l'utilise pour nettoyer les vieux repos utilisé en interne au sein de notre entreprise, combinée avec l'option --filemap option pour supprimer les fichiers indésirables de trop.

28voto

Ry4an Points 56453

Vous pouvez le faire, mais vous la nullité de tous les clones de là, il est donc généralement préférable de ne pas le faire sauf si vous travaillez entièrement seul.

Chaque ensemble de modifications dans mercurial est identifié de manière unique par un hashcode, qui est une combinaison de (entre autres choses) la modification du code source, des métadonnées et les hachages de ses un ou deux parents. Les parents doivent exister dans le repo tout le chemin du retour au début du projet. (N'ayant pas cette restriction serait d'avoir peu profondes des clones, qui ne sont pas (encore)).

Si vous êtes d'accord avec la modification de la hachages de la plus récente révision (qui brise toutes les clones il y a dans la nature), vous pouvez le faire avec les commandes;

hg export -o 'changeset-%R.patch' 400:tip   # changesets 400 through the end for example
cd /elsewhere
hg init newrepo
cd newrepo
hg import /path/to/the/patches/*.patch

Vous aurez probablement à faire un peu de travail pour traiter de fusion des révisions, mais c'est l'idée générale.

On pourrait aussi le faire en utilisant hg convert type hg comme la source et la destination des types, et à l'aide d'un splicemap, mais c'est probablement plus encore en jeu.

La grande question est, comment voulez-vous de type de 60GB de code source, ou avez-vous été l'ajout de fichiers générés à l'encontre de tous les conseils. :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X