Quelle est la différence entre hg oublier et hg supprimer?

313

Je veux que mercurial supprime plusieurs fichiers de l'état actuel du référentiel. Cependant, je veux que les fichiers existent dans l'histoire antérieure.

Comment font forgetet removediffèrent, et peuvent-ils faire ce que je veux?

Paul Nathan
la source
27
Ne vous inquiétez pas, vous ne pouvez pas supprimer un fichier de l'historique précédent dans Mercurial - l'historique est généralement immuable à moins que vous ne commenciez à utiliser des extensions.
Martin Geisler

Réponses:

348

' hg forget' est juste un raccourci pour ' hg remove -Af'. De l' hg removeaide ' ':

... et -Af peuvent être utilisés pour supprimer des fichiers de la prochaine révision sans les supprimer du répertoire de travail.

Bottom line: ' remove' supprime le fichier de votre copie de travail sur le disque (sauf si vous l'utilisez -Af) et ' forget' ne le fait pas.

Ry4an Brase
la source
7
"hg oublier" est réintroduit dans Mercurial 1.3 comme un moyen plus facile de faire "hg remove -Af". Il planifie la suppression du fichier sans le supprimer de la copie de travail.
Martin Geisler
5
Heureux de l'entendre. 'remove -Af' (et tout le tableau des options sur la page d'aide 'remove') est / était une folie.
Ry4an Brase
32
@ Ry4an: Sérieusement, c'était ridicule. J'ai contribué le patch qui a réintroduit «oublier». Quand je l'ai fait, j'ai réalisé que -Af était parfaitement logique dans le code, mais du point de vue d'un utilisateur, c'était complètement ridicule.
Steve Losh
10
C'est ce qui est si génial avec mercurial - les gens réfléchissent activement et itérativement à ce qui a du sens du point de vue de l'utilisateur. Merci d'avoir réparé celui-là.
Ry4an Brase
9
Fichiers de configuration de construction locaux ou similaires? Des chemins vers des outils locaux qui diffèrent d'un système à l'autre? Vous avez accidentellement ajouté un fichier journal que vous ne souhaitez pas dans le contrôle de code source, mais que vous souhaitez enregistrer? Je suppose que ça arrive.
Ry4an Brase
42

La meilleure façon de mettre c'est hg forgetest identique à hg remove excepter qu'il laisse les fichiers derrière dans votre copie de travail. Les fichiers sont laissés en tant que fichiers non suivis et peuvent désormais être ignorés en option avec un motif dans .hgignore.

En d'autres termes, je ne peux pas dire si vous l'avez utilisé hg forgetou hg removequand je me retire de vous. Un fichier que vous avez exécuté hg forgetsur sera supprimé lorsque je mets à jour à ce changeset - comme si vous aviez utilisé à la hg removeplace.

Martin Geisler
la source
27

À partir de la documentation, vous pouvez apparemment utiliser l'une des commandes pour conserver le fichier dans l'historique du projet. Il semble que vous souhaitiez le supprimer, car il supprime également le fichier du répertoire de travail.

Extrait du livre Mercurial à http://hgbook.red-bean.com/read/ :

La suppression d'un fichier n'affecte pas son historique. Il est important de comprendre que la suppression d'un fichier n'a que deux effets. Il supprime la version actuelle du fichier du répertoire de travail. Cela empêche Mercurial de suivre les modifications apportées au fichier, à partir du prochain commit. La suppression d'un fichier ne modifie en aucun cas l'historique du fichier.

La page de manuel hg (1) dit ceci à propos d'oublier:

Marquez les fichiers spécifiés afin qu'ils ne soient plus suivis après le prochain commit. Cela supprime uniquement les fichiers de la branche actuelle, pas de l'historique complet du projet, et ne les supprime pas du répertoire de travail.

Et à propos de supprimer:

Planifiez la suppression des fichiers indiqués du référentiel. Cela supprime uniquement les fichiers de la branche actuelle, pas de l'historique complet du projet.

Jason Catena
la source
3

Si vous utilisez "hg remove b"un fichier avec le statut "A", ce qui signifie qu'il a été ajouté mais non validé, Mercurial répondra:

  not removing b: file has been marked for add (use forget to undo)

Cette réponse est une explication très claire de la différence entre supprimer et oublier.

Ma compréhension est que "hg forget"c'est pour annuler un fichier ajouté mais non validé afin qu'il ne soit pas suivi par le contrôle de version; while "hg remove"sert à retirer un fichier validé du contrôle de version.

Ce fil a un exemple d'utilisation hg removecontre des fichiers de 7 types de statut différents.

gm2008
la source
2

Un fichier peut être suivi ou non, vous utilisez hg ajouter pour suivre un fichier et hg supprimer ou hg oublier de le décompresser. L'utilisation de hg remove sans indicateurs supprimera le fichier et le supprimera, hg oublier le supprimera simplement sans le supprimer.

Tao
la source
3
Je ne sais pas pourquoi vous avez ressenti le besoin d'ajouter cette citation alors que l'homme lui-même a déjà sonné, mais bon, quoi que flotte votre bateau.
Nathan Tuggy