Mercurial (hg) confirma solo ciertos archivos

119

Estoy tratando de confirmar solo ciertos archivos con Mercurial. Debido a que hg tiene auto-add cada vez que intento realizar un cambio, quiere confirmar todos los archivos. Pero no quiero eso porque ciertos archivos aún no están "listos".

Ahi esta

hg commit -I thefile.foo

pero esto es solo para un archivo. La mejor manera para mí sería si puedo desactivar la adición automática como en Git. es posible?

Praveen Kumar Purushothaman
fuente
5
utilizar la extensión de registro? o puede especificar archivos en la línea de comandohg ci foo bar baz
tonfa
4
@tonfa, vuelva a publicar su comentario como respuesta
Andrei Dziahel
Por favor, no destroces tus publicaciones.
Glorfindel
¿Por qué estás destrozando una pregunta tan agradable, amigo?
Praveen Kumar Purushothaman

Respuestas:

155

Puede especificar los archivos en la línea de comando, como escribe tonfa:

$ hg commit foo.c foo.h dir/

Eso simplemente funciona y eso es lo que hago todo el tiempo. También puede usar la --includebandera que ha encontrado, y puede usarla varias veces así:

$ hg commit -I foo.c -I "**/*.h"

Incluso puede usar un conjunto de archivos para seleccionar los archivos que desea confirmar:

$ hg commit "set:size(1k - 1MB) and not binary()"

No hay ninguna configuración que desactive el comportamiento de adición automática y haga que Mercurial funcione como lo hace Git. Sin embargo, la extensión mq puede resultar de interés. Es una extensión avanzada, pero te permite hacerlo

$ hg qnew feature-x     # create new patch
$ hg qrefresh -s foo.c  # add a file to the current patch
$ hg qrefresh -s bar.c  # add another file to the patch
$ hg qfinish -a         # convert applied patches to normal changesets

Sin embargo, yo mismo no uso MQ para este propósito, ya que creo que es suficiente especificar los nombres de archivo en la línea de comando.

Martin Geisler
fuente
¿Qué comportamiento de "comportamiento de adición automática"? ¿Hg solía agregar archivos automáticamente? Porque ahora tienes que hacerlo explícitamente o no se les hará seguimiento.
mpen
1
@mpen Creo que se refiere a cómo gh agrega automáticamente todos los archivos modificados a una confirmación, a diferencia de git, en el que tienes que agregar manualmente archivos modificados a la siguiente confirmación, y puedes dejar algunos archivos modificados sin confirmar
simpleuser
24

Si desea confirmar algunos archivos y excluir muchos otros, enumere explícitamente los archivos que desea confirmar. -Isolo es necesario si desea utilizar patrones en lugar de archivos.

Si desea confirmar muchos archivos y excluir solo unos pocos, usar -Xes más conveniente.

Por ejemplo, dado un repositorio que contiene "archivo_1", "archivo_2" y "archivo_3", los siguientes son equivalentes, pero este último es más fácil / rápido de escribir:

hg commit file_1 file_2
hg commit -X file_3
Rob W
fuente
8

A partir de 3.8 también puede usar hg commit --interactivepara seleccionar los archivos (antes de 3.8 puede usar la extensión crecord para una funcionalidad similar). La bandera --interactive(o simplemente -i) hará que hg le solicite los archivos que desea incluir en la confirmación. Como beneficio adicional, incluso puede incluir / excluir fragmentos dentro de los archivos.

A continuación se muestra un ejemplo de cómo se ve la interfaz. Tenga en cuenta que esta es una captura de pantalla antigua (de crecord en realidad), por lo que la interfaz ha cambiado ligeramente (pero los conceptos básicos son los mismos). captura de pantalla de crecord

Tenga en cuenta que para obtener esa interfaz necesita la interfaz de curses habilitada. Puede hacerlo para una sola ejecución con hg commit --config ui.interface=curses --interactiveo en general agregando lo siguiente a su .hgrc:

[ui]
interface = curses
studgeek
fuente