¿Cuál es la diferencia entre hg forget y hg remove?

313

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

¿De qué manera forgety removeson diferentes, y pueden hacer lo que quiero?

Paul Nathan
fuente
27
No se preocupe, no puede eliminar un archivo del historial anterior en Mercurial: el historial generalmente es inmutable a menos que comience a usar extensiones.
Martin Geisler

Respuestas:

348

" hg forgetes solo una abreviatura de hg remove -Af". De la ' hg remove' ayuda:

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

En pocas palabras: ' remove' elimina el archivo de su copia de trabajo en el disco (a menos que lo use -Af) y ' forget' no lo hace.

Ry4an Brase
fuente
77
"hg forget" se reintroduce en Mercurial 1.3 como una forma más fácil de hacer "hg remove -Af". Programa la eliminación del archivo sin eliminarlo de la copia de trabajo.
Martin Geisler
55
Alegra oírlo. 'remove -Af' (y toda la tabla de opciones en la página de ayuda 'remove') es / fue una locura.
Ry4an Brase
32
@ Ry4an: En serio, fue ridículo. Contribuí con el parche que reintrodujo 'olvidar'. Cuando lo hice me di cuenta de que -Af tenía mucho sentido en el código, pero desde el punto de vista del usuario era completamente ridículo.
Steve Losh
10
Je, eso es lo bueno de Mercurial: las personas están pensando activa e iterativamente en lo que tiene sentido desde el punto de vista del usuario. Gracias por arreglar eso.
Ry4an Brase
99
¿Archivos de configuración de compilación local o similares? ¿Caminos a herramientas locales que difieren de un sistema a otro? ¿Agregó accidentalmente un archivo de registro que no desea en el control de origen, pero desea guardar? Supongo que pasa.
Ry4an Brase
42

La mejor manera de poner es que hg forgetes idéntica a hg remove excepto que deja detrás de los archivos en su copia de trabajo. Los archivos se dejan atrás como archivos sin seguimiento y ahora se pueden ignorar opcionalmente con un patrón en.hgignore .

En otras palabras, no puedo decir si lo usaste hg forgeto hg removecuándo me aparté de ti. Un archivo que se ejecutó hg forgeten se borrará cuando actualice a ese conjunto de cambios - al igual que si se hubiera usado hg removeen su lugar.

Martin Geisler
fuente
27

De la documentación, aparentemente puede usar cualquiera de los comandos 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/ :

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

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

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

Y esto sobre eliminar:

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

Jason Catena
fuente
3

Si utiliza "hg remove b"un archivo con el estado "A", lo que significa que se agregó pero no se confirmó, 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.

Tengo entendido que "hg forget"es para deshacer un archivo agregado pero no confirmado para que el control de versiones no lo rastree; mientras"hg remove" es para sacar un archivo comprometido del control de versiones.

Este hilo tiene un ejemplo para usar hg removecontra archivos de 7 tipos diferentes de estado.

gm2008
fuente
2

Se puede rastrear o no un archivo , se usa hg add para rastrear un archivo y hg remove u hg se olvida de anular el seguimiento. El uso de hg remove sin banderas eliminará el archivo y lo destrabará , hg forget simplemente lo destrabará sin eliminarlo.

Tao
fuente
3
No sé por qué sentiste la necesidad de agregar esta cita cuando el hombre mismo intervino, pero bueno, lo que sea que haga flotar tu bote.
Nathan Tuggy