2011-05-25 14 views
10

Estoy usando git diff --name-status para rastrear qué archivos se han modificado/agregado/eliminado/renombrado/copiado entre dos confirmaciones, y funciona muy bien.¿Cómo puedo limitar git-diff a un solo directorio, sin sus hijos?

Ahora supongamos que mover el archivo file1 a newdir/file1, se comprometen, a continuación, ejecutar git diff, me sale esto:

$ git diff --name-status -C HEAD~1 HEAD 
R100 file1 newdir/file1 

¿Hay una manera de pedir git limitarse a la lista de cambios dentro de una determinada directorio pero no sus hijos? Me gustaría saber los cambios exactos tanto para el directorio raíz como para el directorio newdir, por separado. Para newdir, es fácil:

$ git diff --name-status -C HEAD~1 HEAD -- newdir 
A  newdir/file1 

... pero ¿cómo puedo obtener la información "complementaria" diff en el directorio raíz? Es decir, esta salida:

$ git diff ??? 
D  file1 

Tenga en cuenta que quiero mantener la opción -C para detectar cambios de nombre y copias dentro del mismo directorio.

Respuesta

1

pasarla a través de grep:

git diff --name-status HEAD..HEAD~1 . | grep ^[^/]*$ 

Esto filtrará cualquier cosa que contenga un subdirectorio, si necesita obtener algo de una profundidad, haga esto:

git diff --name-status HEAD..HEAD~1 <path> | grep ^<path>[^/]*$ 

Podría alias fácilmente esto si quisiera.

+0

'git diff .. - ' funcionó para mí. – sholsinger

1

Sé que es probablemente factible en git, pero me gustaría tener la tentación de utilizar los programas filterdiff/grepdiff de patchutils algo como esto debería funcionar bien

git diff -C .... | filterdiff --clean -x '*/*/**' 
+0

La salida de 'git diff --name-status' no es un archivo de revisión, sino una lista de archivos modificados solamente, por lo que parece que' filterdiff' no ayuda. –

Cuestiones relacionadas