Je souhaite que Mercurial supprime plusieurs fichiers de l'état actuel du référentiel. Cependant, je veux que les fichiers existent dans l’historique précédent.
En quoi forget
et remove
diffèrent-ils et peuvent-ils faire ce que je veux?
'hg forget
' est simplement un raccourci pour 'hg remove -Af
'. Dans l'aide 'hg remove
':
... et -Af peuvent être utilisés pour supprimer des fichiers de la prochaine révision sans les supprimer du répertoire de travail.
Ligne de fond: 'remove
' supprime le fichier de votre copie de travail sur disque (sauf si vous utilisez -Af
) et 'forget
' pas.
La meilleure façon de dire est que hg forget
est identique à hg remove
sauf qu'il laisse les fichiers dans votre copie de travail. Les fichiers sont laissés comme fichiers non suivis et peuvent maintenant être éventuellement ignorés avec un motif dans .hgignore
.
En d'autres termes, je ne peut pas dire si vous avez utilisé hg forget
ou hg remove
lorsque je vous tire dessus. Un fichier sur lequel vous avez exécuté hg forget
sur sera sera supprimé lors de la mise à jour de cet ensemble de modifications - comme si vous aviez utilisé hg remove
à la place.
Dans la documentation, vous pouvez apparemment utiliser l’une ou l’autre commande pour conserver le fichier dans l’historique du projet. On dirait que vous voulez supprimer, car il supprime également le fichier du répertoire de travail.
Extrait du livre Mercurial à l'adresse 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. Il 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 la prochaine validation. 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 cela à propos de supprimer:
Planifiez les fichiers indiqués pour la suppression du référentiel. Cela supprime uniquement les fichiers de la branche en cours, pas de l'historique complet du projet.
Si vous utilisez "hg remove b"
contre un fichier dont le statut est "A", ce qui signifie qu'il a été ajouté mais qu'il n'a pas été 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.
Si j'ai bien compris, "hg forget"
sert à annuler un fichier ajouté mais non validé de sorte qu'il ne soit pas suivi par le contrôle de version; while "hg remove"
est destiné à extraire un fichier validé du contrôle de version.
Ce fil a un exemple d'utilisation de hg remove
contre des fichiers de 7 types de statut différents.
Un fichier peut être suivi ou non, vous utilisez hg add pour suivre un fichier et hg remove ou hg oubliez de le dés-suivre. L'utilisation de hg remove sans drapeaux supprimera et supprimera le suivi du fichier, hg oublier le supprimera tout simplement sans le supprimer.