¿Cómo hacer que git-diff y git log ignoren archivos nuevos y eliminados?

155

A veces hay un par de archivos modificados junto con algunos archivos nuevos, eliminados y / o renombrados. Al hacer git diffo git-logme gustaría omitirlos, para poder detectar mejor las modificaciones.

En realidad, sería mejor enumerar los nombres de los archivos nuevos y eliminados sin su contenido. Para "viejo" renombrado a "nuevo", me gustaría obtener opcionalmente la diferencia entre "viejo" y "nuevo".

maaartinus
fuente

Respuestas:

217

La --diff-filteropción funciona con ambos diffy log.

Utilizo --diff-filter=Mmucho lo que restringe las salidas de diferencias solo a modificaciones de contenido.

Para detectar cambios de nombre y copias y el uso de estos en la salida del diff, puede utilizar -My -C, respectivamente, junto con el Ry Copciones a --diff-filter.

CB Bailey
fuente
3
Cuando se usa con git logesto, hará que ignore por completo las confirmaciones que solo agregan y / o eliminan archivos.
qqx
77
¿Hay alguna manera de excluir realmente un solo tipo de datos? Algo así como--diff-filter=!D
Kamil Dziedzic
24
@Kamil Sí, lo hay. Cita de la documentación:Also, these upper-case letters can be downcased to exclude. E.g. --diff-filter=ad excludes added and deleted paths.
LambdaCruiser
62
  • Documento oficial:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]

Seleccione solo los archivos que se añaden (A), se copian (C), se eliminan (D), se modifican (M), se cambian de nombre (R), se cambia su tipo (es decir, archivo normal, enlace simbólico, submódulo, ...) (T), no están fusionados (U), son desconocidos (X) o se han roto sus pares (B). Se puede usar cualquier combinación de los caracteres de filtro (incluido ninguno).

Cuando se agrega * (All-or-none) a la combinación, todas las rutas se seleccionan si hay algún archivo que coincida con otros criterios en la comparación; Si no hay ningún archivo que coincida con otros criterios, no se selecciona nada.

Además, estas letras mayúsculas se pueden descartar para excluir. Por ejemplo, --diff-filter = ad excluye las rutas agregadas y eliminadas.

Ejemplo: mostrar solo los archivos agregados, modificados y modificados excluye los archivos eliminados:

git diff --diff-filter=ACM
TeeTracker
fuente
2
Una buena nota sobre el uso de opciones de letras minúsculas para excluir rutas y las opciones de letras mayúsculas para incluir rutas.
stuyam
-3

ACTUALIZACIÓN: La respuesta aceptada por Charles Bailey es la correcta; la funcionalidad deseada ya está integrada en git.

Dejaré esta respuesta aquí, ya que podría proporcionar ideas para cosas que no están integradas en git.


git diffmuestra archivos nuevos y eliminados comparándolos con /dev/null. No debería ser demasiado difícil escribir algo (usaría Perl yo mismo) que busca /dev/nully filtra las siguientes líneas hasta la siguiente diferencia. Entonces git diff ... | the-filter.

Los archivos renombrados son un asunto diferente; No tengo (todavía) una buena respuesta a eso.

Keith Thompson
fuente
Esto está bien, pero de esta manera perdería la posibilidad de usar el localizador (menos) solo si fuera necesario, ¿no?
maaartinus
@maaartinus: supongo que sí; No había pensado en eso. (Personalmente, configuré mi localizador de git en "cat" y lo uso ... | lessexplícitamente). Puede mirar less's -Eu -Fopción (aunque en mi sistema no me deja ver la salida).
Keith Thompson
Bien, está bien, pero mira la otra respuesta.
maaartinus