Je déplace un processus de construction pour utiliser Mercurial et je souhaite que le répertoire de travail revienne à l'état de la révision de la pointe. Les exécutions précédentes 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 d’éliminer tout cela et d’obtenir un répertoire de travail propre comportant la dernière révision?
Actuellement je fais ça:
hg revert --all
<build command here to delete the contents of the working directory, except the .hg folder.>
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 dépôt, de faire un nouveau clone et une mise à jour. Mais le repo est trop gros pour que cela soit assez rapide.
Ces étapes devraient peuvent être réduites à:
hg pull
hg update -r MY_BRANCH -C
L'indicateur -C
indique à la commande de mise à jour de rejeter toutes les modifications locales avant la mise à jour.
Cependant, cela peut toujours laisser des fichiers non suivis dans votre référentiel. Il semble que vous souhaitiez vous en débarrasser également. J'utiliserais donc l'extension purge
:
hg pull
hg update -r MY_BRANCH -C
hg purge
Dans tous les cas, vous ne pouvez pas demander à Mercurial d'exécuter une commande qui fera tout ce que vous voulez, sauf si vous changez le processus en utilisant la méthode du "clone complet" que vous ne pouvez pas faire.
hg up -C
Cela supprimera toutes les modifications et mettra à jour la dernière tête de la branche actuelle.
Et vous pouvez activer extension de purge pour pouvoir également supprimer tous les fichiers non versionnés.
Pour supprimer les fichiers non suivis 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 supprime les modifications non validées (pas de sauvegarde)
status -u --unknown affiche uniquement les fichiers inconnus (non suivis)
status -n --no-status cacher le préfixe de statut
hg status vous montrera tous les nouveaux fichiers, puis vous pourrez simplement rm les.
Normalement, je veux me débarrasser des fichiers ignorés et non versionnés, ainsi:
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 Stack Overflow, qui consiste à 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 "Nettoyer" dans votre processus de construction, et peut-être une option "Nettoyez vraiment" et "Assurez-distclean".
Si vous recherchez une méthode qui soit facile , essayez-le.
Pour ma part, je me souviens à peine des lignes de commande de tous mes outils. J'ai donc tendance à le faire avec l'interface utilisateur:
1. Tout d'abord, sélectionnez "commit"
2. Ensuite, affichez les fichiers ignorés. Si vous avez des modifications non validées, masquez-les.
3. Maintenant, sélectionnez-les tous et cliquez sur "Supprimer les versions non suivies".
Terminé. C'est une procédure beaucoup plus facile à retenir que les commandes en ligne de commande.