Incluir nuevos archivos en SVN diff


Tengo un script que construye mi aplicación, la carga en una máquina remota, ejecuta una prueba de rendimiento allí y captura algunas métricas que me importan. El script crea un archivo de parche para las modificaciones locales que hago en mi espacio de trabajo y lo muestra junto con los números de rendimiento. Esto me ayuda a comparar el efecto de varias opciones de ajuste. Si quiero volver a crear mi espacio de trabajo en una fecha posterior, puedo usar el número de revisión SVN y el parche.

svn diff no reporta un nuevo archivo Agrego al espacio de trabajo a menos que use explícitamente svn add en ellos primero. ¿Hay alguna manera de crear un archivo de parche que incluya los nuevos archivos también?

PS: Una pregunta similar se hizo aquí pero no fue contestada adecuadamente, OMI.

Author: Community, 2010-11-22

2 answers

Para hacer que svn diff incluya todos los archivos no versionados de su copia local de trabajo, primero debe agregar estos archivos. svn diff muestra el mismo conjunto de cambios que svn commit usaría.

Si está seguro de que todos los archivos no versionados deben agregarse, esto es lo que podría hacer.

Prepare una lista de archivos no versionados tomando de la salida de svn status todas las líneas que comienzan con un signo de interrogación:

svn status | grep ^? | sed -r 's/^\? +//' > ../unversioned_files_list.txt

Luego puede pasar esa lista de archivos a svn add usando xargs:

xargs -r -d '\n' svn add < ../unversioned_files_list.txt

Y luego producir el parche:

svn diff > ../my_patch.patch

Si no desea mantener esos archivos agregados, use la lista de archivos para eliminarlos:

xargs -r -d '\n' svn rm --keep-local < ../unversioned_files_list.txt
 40
Author: Alex Jasmin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-24 01:17:14

Gracias Alexandre. Al principio, su enfoque no funcionó en mi caso. Estaba seguro de que todos los archivos nuevos estaban hechos A en svn status, sin embargo, el archivo diff todavía estaba vacío. Finalmente, encontré la diferencia en las salidas svn status, las cuartas columnas en mi caso están pobladas con +, como:

$ svn st
M      .
A  +    New.java

Esto significa que el artículo está programado para addition-with-history [1]. Esto suele ocurrir cuando svn move o svn copy un archivo o directorio[2]. En mi caso, el New.java es svn merged de otra rama, incluyendo anterior historial de confirmaciones en esa rama. Eliminemos esta información de la historia.

Primero, encuentra todos los elementos addition-with-history:

svn status | grep ^A | sed -r 's/^A[ +]+//' > /tmp/add_list

Opcionalmente, elimine las rutas de directorio en /tmp/add_list para evitar advertencias en el siguiente paso.

Luego, elimine la información de confirmación de su historial por svn remove:

xargs -r -d '\n' svn remove --keep-local --force < /tmp/add_list

Luego, vuelva a la solución de Alexandre para añadirlos a subversion de nuevo y obtener el diff.

Referencias:

[1]http://svnbook.red-bean.com/nightly/en/svn.ref.svn.c.status.html
[2]http://www.linuxtopia.org/online_books/programming_tool_guides/version_control_with_subversion/svn.ref.svn.c.status.html
 12
Author: guiwuu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-27 10:45:42