2011-05-19 14 views
20

Utilizo un repositorio de Git en mi servidor para actualizar los archivos de datos de usuario enviados al servidor. Estoy interesado en obtener una lista de archivos modificados entre dos revisiones.En Git, ¿cómo obtengo una lista detallada de los cambios de archivos de una revisión a otra?

Sé acerca de git diff --name-only <rev1> <rev2>, pero esto solo me da una lista de nombres de archivos. También me interesan especialmente los cambios de nombre y las copias. Idealmente, la salida sería algo como esto:

updated: userData.txt 
renamed: picture.jpg -> background.jpg 
copied: song.mp3 -> song.mp3.bkp 

¿Es posible? --name-status tampoco parece indicar cambios de nombre y copias.

Respuesta

26
git diff --name-status -C <rev1> <rev2> 

debe estar más cerca de lo que busca.

--name-status habría mostrar los nombres de los archivos y su respectivo estado:

(A|C|D|M|R|T|U|X|B) 

Agregado (A), copiar (C), Deleted (D), de modificación (M), renombrar (R),
tipo (es decir archivo regular, enlace simbólico, submódulo, ...) cambió (T),
unmerged (T), desconocido (X), o el pareado Broken (B)

(a la que el OP Jean Philippe Pellet agrega:

Las cartas de estado R y C “siempre son seguidos por un marcador que indica el porcentaje de similitud entre el origen y el destino del movimiento o copia, y son los únicos que ser tan". )

En cuanto a los archivos copiados o movidos:

-C[<n>] 
--find-copies[=<n>] 

Detectar copias, así como cambia el nombre. Si se especifica n, tiene el mismo significado que para -M<n>.

--find-copies-harder 

Por motivos de rendimiento, por defecto, -C opción busca copias sólo si el archivo original de la copia se modificó en el mismo conjunto de cambios.
Este indicador hace que el comando inspeccione los archivos no modificados como candidatos para la fuente de copia.
Esta es una operación muy costosa para proyectos grandes, así que ústela con precaución. Dar más de una opción -C tiene el mismo efecto.


brauliobo recomienda in the comments:

git diff --stat -C 
git show --stat -C 
git log --stat -C 
+1

Genial, esto es exactamente lo que necesito. Para completar, añadiré que las letras de estado 'R' y' C' "siempre van seguidas de una puntuación que denota el porcentaje de similitud entre la fuente y el objetivo del movimiento o copia, y son los únicos que lo son "([Fuente] (http://www.kernel.org/pub/software/scm/git/docs/git-diff.html)). –

+0

@ Jean-Philippe: buen punto. Lo he incluido en la respuesta. – VonC

+0

Gracias! La única parte que queda abierta es cómo interpretar las entradas con el tipo 'X' o' B' ... –

3

creo que `` mostrará que la información

git diff -M -C --stat 
+0

Gracias!Parece que '-M' es redundante ya que' -C' detecta "copias y nombres", y '--stat' parece no tener efecto cuando se especifica' -C'. –

+1

mucho mejor y también funciona con 'show' y' log'. ¡Gracias! – brauliobo

Cuestiones relacionadas