Mercurial: ¿todos los archivos que cambiaron en un conjunto de cambios?

97

¿Cómo puede determinar todos los archivos que cambiaron en un conjunto de cambios dado?

No estoy buscando una diferencia en este caso, solo una lista de agregar / eliminar / modificaciones.

hg log -vprX hace una lista de diferencias pero solo quiero los archivos.

Marcus Leon
fuente
Posible duplicado de Examinar un conjunto de cambios único en Mercurial
Michał Wróbel

Respuestas:

149

Si desea enumerar solo los archivos que han cambiado, entonces debe usar el "comando de estado". A continuación, se enumeran los cambios a los archivos en la revisión REV.

hg status --change REV
pyfunc
fuente
13
+1, pero el OP probablemente también quiera la bandera -n/ --no-status.
Niall C.
7
Para copiar fácilmente:hg status --no-status --change REV
zastrowm
+1 Esto es mucho más fácil de escribir que hg status --rev REV~1:REVlo que solía hacer.
Patrick Oscity
3
utilizar '.' para la REV actual. significado -hg status --change .
zaxy78
16

Simplemente elimínelo pde su hg log -vprse mostrará la lista de archivos. -psignifica mostrar parche. También puede utilizar una plantilla para formatear la salida a su gusto.

Geoffrey Zheng
fuente
3
Creo que necesitará la siguiente plantilla: --template 'archivos: {archivos} \ n'
Ton Plomp
1
Creo que {files} es parte de la plantilla predeterminada de la bandera -v
eskhool
2
hg log -r. --template '{join (files, "\ n")}' para separar los archivos de línea nueva
Foxichu
1
El comentario de @Foxichu funcionó para mí, pero fue un poco hacky. en realidad, la respuesta superior: hg status --change .funcionó mejor y dio un prefijo de acción de archivo (A \ M \ D, etc.) y una mejor ruta relativa
zaxy78
13

Sé que la pregunta es para un solo conjunto de cambios, pero si desea modificar todos los archivos para un rango de conjuntos de cambios, puede hacerlo

hg status --rev 1 --rev 10 -m
Nick DeVore
fuente
2
Terriblemente mal. ¡Los archivos modificados en rango son hg log -r BEGIN:END --template "{files}\n"como @ geoffrey-zheng y @ton escribieron hace dos años!
Lazy Badger
Lo siento por eso. Supuso que su respuesta era para el conjunto de cambios único.
Nick DeVore
1
En mi opinión, esta respuesta no es tan terrible. hg status --rev BEGIN --rev ENDes: 1. mucho más fácil de recordar que hg log -r BEGIN:END --template "{files}\n"; 2. imprime los archivos en líneas separadas sin usar sed(@Eric Lawler) o join()(@Foxichu); 3. sin la -mbandera, muestra no solo archivos modificados, sino también agregados y eliminados (el color estándar agradable se aplica aquí también); 4. hay -ay -rbanderas que permiten diferentes filtros; 5. Si uno no quiere el prefijo de estado, hay una -nopción que lo suprime.
Michał Wróbel
9

Revisión actual comprometida

hg status --change .

.es la abreviatura de la rev actual, al igual que @HEADen Git

Revisión actual no comprometida

hg status

Revisión arbitraria comprometida

hg status --change REV_ID
Gibolt
fuente
1
¡La respuesta más simple y precisa!
zaxy78
2

Encontré esta pregunta buscando en Google un concepto similar. Para mostrar todos los archivos que cambiaron a través de una variedad de conjuntos de cambios, es tan fácil como:

hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n" | sed -e 's/ /\n/g' | sort -d | uniq
  1. hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n"le mostrará una lista de cada archivo modificado o agregado en cada conjunto de cambios, desde [inicio rev] a [fin rev], con los archivos de cada conjunto de cambios en una nueva línea. Cambiar {file_mods}{file_adds}con {files}para mostrar todos los archivos modificados, agregados o eliminados.
  2. sed -e 's/ /\n/g' dividirá todos los archivos para mostrarlos en líneas separadas y
  3. sort ¿Ordenará la lista por usted para que podamos filtrarla con uniq?
  4. uniq filtrará la lista para eliminar los archivos duplicados que cambiaron en más de una revisión.
Eric L.
fuente
Esta solución pega la última modificación con el primer archivo agregado. Además, no trata correctamente los espacios en los nombres de archivo. Se --templatepodría construir una solución basada en A sin estas deficiencias usando join()como lo sugiere @Foxichu.
Michał Wróbel
1

Sé que esta pregunta es antigua y me sorprende que nadie haya ofrecido un código modificado en forma de OP. Obtuve una lista de archivos modificados / agregados / eliminados (sin etiquetar cuál es cuál) con solo ejecutarlo hg log -v. O lo que realmente necesitaba hg log -v -l5para ver los archivos que se han modificado / agregado / eliminado en las últimas 5 confirmaciones (incluidos los que aún no envié al repositorio).

Đorđe Relić
fuente
"nadie acaba de ofrecer el formulario de código modificado OP" - @Geoffrey Zheng hizo exactamente eso ~ 1h después de que se publicó la pregunta
Michał Wróbel
-2

Si es como la mayoría de las tiendas, utiliza un sistema de venta de entradas para rastrear los cambios. Si conoce el número de ticket y desea encontrar todas las confirmaciones asociadas con ese ticket (asumiendo que incluye el número de ticket en el mensaje de confirmación), puede usar:

hg log -k TICKET_NUMBER

Esto muestra todas las revisiones asociadas con el ticket. Sin embargo, no enumera los archivos. Puede usar una de las respuestas anteriores para luego obtener la lista de archivos asociados con las revisiones.

Sin embargo, para hacerlo más simple, combinando la información de las respuestas anteriores, puede hacer lo siguiente para buscar confirmaciones, incluidos los archivos modificados:

hg log -vk TICKET_NUMBER
iDimensionz
fuente
Esto está relacionado con la pregunta. El cartel preguntó cómo obtener archivos en un conjunto de cambios. Los conjuntos de cambios suelen estar relacionados con los tickets. Mi solución muestra cómo obtener archivos relacionados con los conjuntos de cambios asociados a un ticket.
iDimensionz