2010-03-30 11 views
6

Necesito generar un registro de cambios entre dos etiquetas dentro de un proyecto controlado usando git, específicamente el código fuente de Android. Esta lista debe incluir cualquier archivo/directorio/etc que haya sido editado, movido, renombrado, eliminado, creado.Crea una lista de archivos/directorios/etc modificados. usando git entre dos etiquetas

Cualquier ayuda sería genial. Y si tienes una forma de hacerlo en toda la fuente de Android a la vez ... aún mejor.

+0

para aclarar: no me importa Qué cambios se hicieron en los archivos solo que cambiaron. Sin embargo, necesito saber qué cambios se hicieron en los directorios y enlaces sym. – dan

+1

¿Ayudaría http://stackoverflow.com/questions/1038589/how-do-i-find-common-files-changed-between-git-branches? – VonC

+0

¿Eh? ¿Necesitas archivos pero no necesitas archivos? Su pregunta no es muy clara ... – drozzy

Respuesta

6

Si necesita encontrar los archivos que se diferencian:

git diff --name-only <tag1> <tag2> 

Si usted necesita encontrar todos los archivos modificados:

git log --name-only --pretty=format: <tag1>..<tag2> | 
    grep -v '^$' | sort | uniq 

El --pretty=format: es suprimir la información de impresión sobre commits, e imprime solo la parte diff. Tenga en cuenta que en el caso de git log el orden de <tag1> y <tag2> importa.

+0

Eso definitivamente ayudó y creo que soluciona mi problema en su mayor parte. Un par de preguntas siguientes. 1) hay una manera de limitar esto para mostrar solo un tipo de elemento (es decir, solo directorios) o, como mínimo, etiquetar el tipo de elemento. 2) menciona que el orden de las etiquetas importa, ¿me puede indicar un documento que explica cómo el orden hace una diferencia para poder determinar el orden correcto? (Continuaré investigando esto por mi cuenta y publicaré si encuentro lo que estoy buscando de forma independiente) – dan

+0

edite el ejemplo anterior para leer (es decir, solo enlaces simbólicos) como si hubiera leído el siguiente comentario que veo lo haré necesita un comando diferente para encontrar directorios cambiados – dan

+0

@dan: Re 2.) en el caso de "' git log .. '" muestra el historial de la etiqueta 2 posterior a la etiqueta 1, es decir, la etiqueta 1 debe ser anterior a la etiqueta2. Bueno, siempre se puede usar simétrico ' ... ' que muestra los cambios del ancestro común ... –

1

Como menciono en los comentarios, "How do I find common files changed between git branches?" es la principal solución aquí:

git log [--pretty=<format>] --name-only tag1..tag2 

o

git diff --name-only tag1 tag2 

(también mencionado en Gitology recipe)

pero: como se menciona en "How to get a list of directories deleted in my git repository? ", Git solo rastrea el contenido de los archivos, no los directorios en sí.

Para incluir información sobre directorios, debe comenzar a jugar con git diff-tree.

cualquier directorio que se ha creado o eliminado tendrá 040000 en la segunda o primera columna y 000000 en la primera o segunda columna, respectivamente. Estos son los 'modos' de entrada de árbol para las entradas izquierda y derecha.

Algo así como (según Charles Bailey):

git diff-tree -t origin/master master | grep 040000 | grep -v -E '^:040000 040000' 
+0

gracias por la respuesta y el enlace a más información, las revisaré y veré si funcionan para mi situación particular. – dan

Cuestiones relacionadas