2010-10-07 17 views
22

Durante make, creo campos de cadenas que incrusté en el resultado vinculado. Muy útil.¿Cuál es una manera fácil de detectar archivos modificados en un espacio de trabajo de Git?

Aparte de un complejo sed/grep análisis del comando git status, ¿cómo puedo determinar fácilmente si los archivos en el espacio de trabajo se han modificado de acuerdo con git?

+0

Si sólo se preocupa de saber si algo ha cambiado (no cuáles han cambiado) veo [¿Cómo mediante programación determinar si hay cambios uncommited ?] (http://stackoverflow.com/q/3878624/193688) –

Respuesta

24

git ls-files -m

Para encontrar este que podría haber navegado a través git help -a.

+0

Esto es perfecto. – Jamie

+8

@Jamie: los archivos con cambios por etapas (pero no confirmados) no se mostrarán con 'git ls-files -m', que puede ser o no lo que usted desea. –

+1

Ah. Gracias por tu contribución. A decir verdad, 'git ls-files -m' no es lo que quiero, pero responde mi pregunta específica. +1 para comentarios y respuestas. – Jamie

17

git status --porcelain parece dar una buena salida procesable.

+0

Muy agradable. Será útil por otros motivos. – Jamie

+0

Eso es genial, acabo de usarlo para automatizar los resúmenes de commit de git (como se obtiene de la interfaz web de GitHub) que en realidad llegué a esta pregunta buscando: [one-liner para agregar, confirmar y presionar] (https: // github. com/lmmx/devnotes/wiki/Automated-git-status-summary). –

26

Si lo que desea es un claro: “¿Hay diferencias de CABEZA?”:

git diff-index --quiet HEAD 

Si el código de salida es 0, entonces no hubo diferencias.

Si desea “¿Qué archivos han cambiado desde CABEZA?”:

git diff-index --name-only HEAD 

Si desea “¿Qué archivos han cambiado desde la cabeza, y de qué manera han cambiado (añadido, eliminado, cambiado)? “:

git diff-index --name-status HEAD 

Añadir -M (y -C) si desea cambiar el nombre (y copiar) la detección.

Estos comandos verifican tanto el contenido en etapas (lo que está en el índice) como los archivos en el árbol de trabajo. Alternativas como git ls-files -m solo verificarán el árbol de trabajo contra el índice (es decir, ignorarán cualquier contenido por etapas (pero no confirmado) que también esté en el árbol de trabajo).

2

git diff --name-only hace lo mismo (que podría ser más intuitivo ...)

Cuestiones relacionadas