2008-10-01 22 views
18

Tengo algunos cambios locales en un proyecto de código abierto que utiliza Subversion como control de origen. (No tengo acceso de confirmación en el repositorio de proyecto original.)diff de subversión que incluye archivos nuevos

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

¿Cómo puedo hacer un patch que incluya los nuevos archivos?


$ svn st 
    A  tests/foo.zip 
$ svn diff 
$ 
+4

estoy muy interesado en la respuesta a esta pregunta cuando el archivo es * no * binario. – Glyph

+0

@Glyph: mira aquí: http://stackoverflow.com/q/4248768/427532 –

Respuesta

6

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

+1

arg! otra razón por la que no me gusta la subversión. Los parches de git manejan los archivos binarios sin problemas si alguien necesita una alternativa –

0

Si usted está construyendo un parche, es posible que desee utilizar el viejo y simple 'diff' con la opción --new-archivo que trata el archivo que falta lo más vacío.

Tenga en cuenta que la sintaxis para esta opción en realidad puede variar según la versión de diff antiguo normal que esté utilizando.

12

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

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

Creo que esto produce exactamente lo que quería.

26

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

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

patch -p0 --binary -i mybinarydiff.diff 
Cuestiones relacionadas