Mercurial – Comment supprimer tous les changements locaux, y compris les fichiers sans version?

Je déplace un processus de construction pour utiliser mercurial et je veux que le répertoire de travail revienne à l’état de la révision de pointe. Les exécutions antérieures du processus de construction auront modifié certains fichiers et ajouté des fichiers que je ne souhaite pas valider. J’ai donc des modifications locales et des fichiers qui ne sont pas ajoutés au référentiel.

Quel est le moyen le plus simple de supprimer tout cela et d’obtenir un répertoire de travail propre avec la dernière révision?

Actuellement je le fais:

hg revert --all  hg pull hg update -r MY_BRANCH 

mais il semble qu’il devrait y avoir un moyen plus simple.

Je veux faire l’équivalent de supprimer le repository, faire un nouveau clone et une mise à jour. Mais le repo est trop gros pour que cela soit assez rapide.

Ces étapes doivent pouvoir être réduites à:

 hg pull hg update -r MY_BRANCH -C 

Le drapeau -C indique à la commande update de supprimer toutes les modifications locales avant la mise à jour.

Cependant, cela pourrait laisser des fichiers non suivis dans votre référentiel. Il semble que vous vouliez vous débarrasser de ceux-là aussi, donc j’utiliserais l’extension de purge pour cela:

 hg pull hg update -r MY_BRANCH -C hg purge 

Dans tous les cas, vous ne pouvez pas demander à Mercurial d’exécuter une seule commande qui fera tout ce que vous voulez, sauf si vous modifiez le processus en une méthode de “clone complet” que vous ne pouvez pas faire.

 hg up -C 

Cela supprimera toutes les modifications et mettra à jour le dernier en-tête de la twig en cours.

Et vous pouvez activer l’ extension de purge pour pouvoir supprimer tous les fichiers sans version.

Pour supprimer non suivi sur * nix sans l’extension de purge, vous pouvez utiliser

 hg pull hg update -r MY_BRANCH -C hg status -un|xargs rm 

Qui utilise

update -r –rev révision REV

update -C –clean rejette les modifications non validées (pas de sauvegarde)

status -u –unknown ne montre que les fichiers inconnus (non suivis)

status -n –no-status cache le préfixe d’état

Si vous recherchez une méthode simple , vous pouvez essayer ceci.

Pour ma part, je peux difficilement me rappeler des lignes de commande pour tous mes outils, alors j’ai tendance à le faire en utilisant l’interface utilisateur:


1. Tout d’abord, sélectionnez “valider”

Commettre

2. Ensuite, affichez les fichiers ignorés. Si vous avez des modifications non validées, masquez-les.

Afficher les fichiers ignorés

3. Maintenant, sélectionnez-les tous et cliquez sur “Supprimer les versions sans version”.

Supprime-les

Terminé. C’est une procédure beaucoup plus facile à mémoriser que les commandes en ligne.

Le statut de hg vous montrera tous les nouveaux fichiers, et vous pourrez alors simplement les enregistrer .

Normalement, je veux me débarrasser des fichiers ignorés et sans version, alors:

 hg status -iu # to show hg status -iun0 | xargs -r0 rm # to destroy 

Et puis suivez cela avec:

 hg update -C -r xxxxx 

qui met tous les fichiers versionnés dans le bon état pour la révision xxxx


Pour suivre la tradition de Stack Overflow de vous dire que vous ne voulez pas faire cela, je trouve souvent que cette “option nucléaire” a détruit des choses qui me tiennent à cœur.

La bonne façon de le faire est d’avoir une option ‘make clean’ dans votre processus de compilation, et peut-être aussi un make makeclean et make distclean.