Pregunta

Utilizo SVN como sistema de control de origen, y me pregunto cómo comparar directorios sin tener en cuenta las diferencias de metadatos. ¿Hay alguna manera de decirle a svn diff que compare solo el contenido real e ignore los metadatos?

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 el tronco 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: Resolví esto parcialmente difiriendo directamente en el sistema de archivos en lugar de usar las herramientas SVN. Ver mi propia respuesta a continuación ...

¿Fue útil?

Solución 5

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

Otros consejos

Puede pasar la salida svn diff a través de 'filterdiff --clean' para eliminar cualquier línea extraña, incluidos los cambios de propiedad.

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

I.e.,

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

Es un poco más fácil de grep. Supongo que podría tener un proceso de dos etapas si desea una diferencia completa: primero use el resumen para encontrar archivos con cambio de contenido, y luego difiéralos.

Buen consejo de JosephWatkins.

Aquí está el comando para los usuarios grep-junior:

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

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

Encontré esto mientras buscaba en la svn help docs

svn diff --patch-compatible

Es lo mismo que correr

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

Aquí hay un solo comando que hace todo esto. Digamos que quiere encontrar todas las diferencias (sin propiedades) para todos los archivos en el directorio actual entre la revisión 54833 y 57215. Este comando debe hacerlo:

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

NB: solo difiere archivos modificados, no archivos agregados o eliminados.

Utilice svn diff --ignore-properties . Ese es el método incorporado de Subversion para hacer la diferenciación del contenido solamente. Ignora cualquier cambio en las propiedades de los elementos.

Escribí un script 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 introducidas en la parte superior de la secuencia de comandos. Actualmente, está configurado para filtrar los cambios de propiedades, pero puede eliminar cualquier cambio que coincida con una serie de expresiones regulares.

Simplemente canalice la salida de svn diff al script, después de establecer el script. Puse los filtros en el script en lugar de los parámetros porque siempre ejecuto los mismos filtros.

Lo lancé como GPLv2.

clean_svn_diff.bash

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top