web-dev-qa-db-fra.com

Jeter tout et obtenir une copie vierge de la dernière révision?

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.

155
Rory

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.

204
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.

110
zerkms

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

10
KCD

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".

3
John Lawrence Aspden

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"

Commit

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

Show ignored files

3. Maintenant, sélectionnez-les tous et cliquez sur "Supprimer les versions non suivies".

Delete them

Terminé. C'est une procédure beaucoup plus facile à retenir que les commandes en ligne de commande.

3
bytecode77