Pregunta

Tengo algunos cambios locales en un proyecto de código abierto que usa Subversion como su control de origen. (No tengo acceso de confirmación en el repositorio original del proyecto).

Mi cambio agrega un archivo, pero este archivo no está incluido en la salida de " svn diff " ;. (Vale la pena señalar que el nuevo archivo es binario, no texto plano).

¿Cómo puedo hacer un parche que incluye los nuevos archivos?


 $ svn st
   A      tests/foo.zip
 $ svn diff
 $
¿Fue útil?

Solución

El hecho de que su archivo sea binario es exactamente por qué no se muestra, me temo. El comando diff de Subversion solo hace parches / diferencias textuales (aunque Subversion internamente puede manejar las diferencias de archivos binarios de manera eficiente entre versiones).

Otros consejos

Experimenté un comportamiento similar al de Pozsar. Y su respuesta funcionó para mí mejor que la svn diff --force normal. Sin embargo, si se ejecuta en una máquina DOS (por ejemplo, a través de Cygwin), es posible que deba modificar ligeramente su respuesta. El siguiente parche diff + funcionó para parchear mis archivos de texto + binarios en Cygwin usando el argumento --binary:

svn diff --force --diff-cmd /usr/bin/diff -x "-au --binary" OLD-URL NEW-URL > mybinarydiff.diff

patch -p0 --binary -i mybinarydiff.diff

Hay una opción --force para el comando diff, pero produce un archivo de parche incorrecto para binarios en mi máquina. Sin embargo, usarlo con la opción --diff-cmd funciona para mí:

svn diff --force --diff-cmd /usr/bin/diff -x -au

Creo que esto produce exactamente lo que querías.

Si está creando un parche, es posible que desee usar el 'diff' antiguo con la opción --new-file que trata el archivo faltante como vacío.

Tenga en cuenta que la sintaxis para esta opción en realidad puede variar dependiendo de qué versión de diff simple que esté utilizando.

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