2008-12-31 15 views
22

Utilizo SVN como el sistema de control de fuente, y me pregunto cómo comparar directorios sin tener en cuenta las diferencias de metadatos. ¿Hay alguna manera de decir svn diff para comparar solo el contenido real e ignorar cualquier metadato?¿Hay un filtro de exclusión de metadatos para el comando SVN DIFF?

Me refiero a metadatos como propiedades SVN, etc. que no afectan el contenido del archivo. Supongamos que el archivo X tiene una propiedad adicional en la rama B en comparación con la línea troncal T. Desafortunadamente se mostrará en 'svn diff T B' aunque el contenido real del archivo X sea el mismo.

Busco algo como esto:

svn diff https://example.org/tags/v1 https://example.org/tags/v2 -x -ignore-metadata --summarize 

Actualización: He resuelto en parte este de diff'ing directamente en el sistema de archivos en lugar de utilizar las herramientas de SVN. Ver mi propia respuesta a continuación ...

+0

¿Qué quiere decir con metadatos? – codelogic

+0

"Propiedades de SVN" es una mejor palabra para describirlo. Arreglé mi publicación para aclarar esto ... – driAn

+0

Si encuentras una solución, publícala, tengo curiosidad de cómo se haría. Tal vez GIT tiene esta característica ... –

Respuesta

3

Parece que no hay forma de hacerlo usando las herramientas svn incorporadas. Cómo lo resolví: Exporte ambos árboles y difúndalos directamente en el sistema de archivos usando su herramienta de diferencias favorita. Esa es de alguna manera la única forma de hacer esto:/

0

No estoy seguro, pero un simple 'svn diff | grep -iv "cosas para ignorar" sería una solución.

+1

Toda la diferencia viene solo como una gran cantidad de texto, tendría que analizarlo manualmente para filtrar todos los cambios similares a la 'propiedad svn'. No es una tarea fácil que pueda hacer con grep desafortunadamente. – driAn

-6

Puede establecer la propiedad svn:ignore en los archivos y directorios que desea que svn diff ignore.

+1

No quiero ignorar directorios o archivos específicos, se trata de ignorar las diferentes propiedades (metadatos) de los mismos archivos. Supongamos que el archivo X tiene una propiedad adicional en la rama B en comparación con la línea troncal T. Aparecerá en svn diff aunque el contenido real sea el mismo. – driAn

10

Si usa la opción --summarize, los cambios de propiedad se indican en la segunda columna en vez de la primera.

es decir,

M URL -- indicates content change 
M URL -- property change 
MM URL -- content and property change 

que es un poco más fácil de grep. Supongo que podrías tener un proceso de dos etapas si quieres una diferencia completa: primer uso resumir para encontrar archivos con cambio de contenido, luego difúndelos.

5

Buen consejo de JosephWatkins.

Este es el comando para las grep-junior-usuarios:

svn diff A B --summarize | grep '^. ' 

El grep busca un espacio como el segundo carácter de la línea.

+2

Lo siento. Debe ser svn diff A B --summarizar | grep -v '^' Todas las líneas que comiencen con un espacio deben estar ocultas, porque allí solo cambia la propiedad de los archivos. –

+0

Esto no soluciona los casos en los que las propiedades del contenido del archivo * y * se modifican, o donde algo diferente, como el bloqueo, le ocurre al archivo y el archivo se modifica. – trysis

1

Escribí una secuencia de comandos para hacer esto, después de que no pude encontrar uno en línea.

La secuencia de comandos elimina los datos en función de una matriz de expresiones regulares ingresadas en la parte superior de la secuencia de comandos. Actualmente, está configurado para filtrar los cambios en las propiedades, pero puede eliminar cualquier cambio que coincida con una serie de expresiones regulares.

Solo pipe la salida de svn diff a la secuencia de comandos, después de establecer la secuencia de comandos. Puse los filtros en el guión en lugar de los parámetros porque siempre corro los mismos filtros.

Lo lancé como GPLv2.

clean_svn_diff.bash

21

se puede pasar la salida a través de svn diff 'filterdiff --clean' para eliminar cualquier línea extraña, incluyendo cambios en las propiedades.

+0

Trabajando como lo anuncian, ¡genial! Una pista para los usuarios de Debian/Ubuntu: si 'filterdiff' no está en su sistema, puede instalarlo a través de' apt-get install patchutils'. –

2

Aquí hay un solo comando que hace todo esto. Digamos que usted quiere encontrar todos (no la propiedad) ficheros para todos los archivos en el directorio actualmente entre 54833 y 57215. revisión Este comando debe hacerlo:

svn diff -r 54833:57215 --summarize | egrep -v '^ |^D|^A' | awk '{ print $2 }' | xargs svn diff -r 54833:57215 

NB: sólo diffs archivos modificados - no agregados o eliminados archivos.

1

encontrado este mientras que la búsqueda a través de los documentos de ayuda SVN

svn diff --patch-compatible 

Es lo mismo que ejecutar

svn diff --show-copies-as-adds --ignore-properties 
Cuestiones relacionadas