usa turismo pais mexico futbol english capital version-control mercurial

version control - turismo - ¿Cuál es la diferencia entre hg forget y hg remove?



usa (5)

Quiero que mercurial elimine varios archivos del estado actual del repositorio. Sin embargo, quiero que los archivos existan en la historia anterior.

¿Cómo se forget y remove diferencias, y pueden hacer lo que yo quiero?


Un archivo puede ser rastreado o no, usted usa hg add para rastrear un archivo y hg remove u hg se olvida de no rastrearlo. El uso de hg remove without flags eliminará el archivo y lo des-rastreará, hg forget simplemente lo des-rastreará sin borrarlo.


'' hg forget '' es solo una abreviatura de '' hg remove -Af ''. Desde la ayuda '' hg remove '':

... y -Af se pueden usar para eliminar archivos de la próxima revisión sin eliminarlos del directorio de trabajo.

Línea inferior: '' remove '' elimina el archivo de su copia de trabajo en el disco (a menos que use -Af ) y '' forget '' no.


De la documentación, aparentemente puede usar cualquier comando para mantener el archivo en el historial del proyecto. Parece que desea eliminar, ya que también elimina el archivo del directorio de trabajo.

Del libro de Mercurial en http://hgbook.red-bean.com/read/ :

La eliminación de un archivo no afecta a su historial. Es importante entender que eliminar un archivo tiene solo dos efectos. Elimina la versión actual del archivo del directorio de trabajo. Evita que Mercurial rastree los cambios en el archivo, desde el momento de la próxima confirmación. La eliminación de un archivo no altera de ninguna manera el historial del archivo.

La página de manual hg (1) dice esto acerca de olvidar:

Marque los archivos especificados para que ya no se rastreen después de la próxima confirmación. Esto solo elimina los archivos de la rama actual, no del historial completo del proyecto, y no los elimina del directorio de trabajo.

Y esto de eliminar:

Programe los archivos indicados para su eliminación desde el repositorio. Esto solo elimina archivos de la rama actual, no de todo el historial del proyecto.


La mejor forma de hacerlo es que hg forget es idéntico a hg remove excepto que deja los archivos en su copia de trabajo. Los archivos se dejan como archivos sin seguimiento y ahora se pueden ignorar opcionalmente con un patrón en .hgignore .

En otras palabras, no puedo decir si usó hg forget o hg remove cuando lo saque de usted. Un archivo en el que ejecutó hg forget se eliminará cuando actualice a ese conjunto de cambios, como si hubiera usado hg remove lugar.


Si usa "hg remove b" contra un archivo con el estado "A", lo que significa que se ha agregado pero no se ha comprometido, Mercurial responderá:

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

Esta respuesta es una explicación muy clara de la diferencia entre eliminar y olvidar.

Mi entendimiento es que "hg forget" es para deshacer un archivo agregado pero no confirmado para que no sea rastreado por el control de versiones; mientras que "hg remove" es para sacar un archivo confirmado del control de versiones.

Este thread tiene un ejemplo para usar hg remove contra archivos de 7 tipos diferentes de estado.