2009-10-16 7 views
13

Cuando uso 'svn diff' desde la línea de comando, imprime las líneas que han cambiado pero también las 3 líneas sin cambios antes y después para el contexto. Prefiero ver solo las líneas cambiadas sin contexto. No he podido determinar ninguna opción de línea de comando que me permita hacerlo funcionar de esta manera. Los estándares 'diff' y 'cvs diff' hacen lo que quiero de forma predeterminada. Seguramente 'svn diff' puede hacer esto pero me falta algo. Alguien sabe como?Cómo obtener NO contexto al usar svn diff

Respuesta

17

Después de examinar el enlace útil dado anteriormente por unwind, la respuesta corta es que svn's built -in diff no puede hacer lo que quiero. Puedes decirle que use el diff externo estándar y pasar arg a eso para decirle que no quieres contexto. Pongo el siguiente alias en mi .bashrc y todos ahora funciona bien si uso que en lugar:

alias svndiff='svn diff --diff-cmd=diff -x -U0' 
+2

'-x' es el parámetro de extensión para' svn diff', hace que el token inmediatamente siguiente, aquí '-U0', pasar al comando diff especificado con '--diff-cmd', aquí' diff'. – valid

2

This thread parece llegar a la conclusión de que debe utilizar un comando diff externo para controlar la cantidad de contexto.

prefiero diffs unificados, así que mis dedos siempre escriba

svn diff -x -u 

lo que implica que se utiliza un comando externo (GNU diff), creo.

+0

Gracias por el útil enlace. Sorprendentemente, la diferencia incorporada no puede hacer lo que quiero. Me parece violar el principio de Unix de pedir la menor producción. Usar los comandos -x -u me da los mismos resultados que no. 'svn help diff' dime que esos son los valores predeterminados. ¿Tal vez no necesites escribir los caracteres extra después de todo? – DaveBurns

3

Puede canalizar los resultados de 'svn diff' a grep y escribir una expresión regular para obtener lo que desea. Por ejemplo, intente esto:

svn diff | grep "^[+-\]" 

El comando anterior le consigue todas las líneas que comienzan con un '+' o '-' o una '\'. (Necesita '\' si desea ver diferencias como "\ No newline al final del archivo".)

+0

Esto funciona bien si solo desea las líneas modificadas. Sin embargo, no genera la información correcta sobre los números de línea. P.ej. con 3 líneas de contexto antes/después, "@@ -21,7 +21,7 @@" dice que se cambió la línea 24. Sin contexto, verá "@@ -24,1 +24,1 @@" – kamczak

4

La sugerencia anterior todavía produce el formato de contexto, pero con 0 líneas de contexto. Esta todavía no es la salida de diff tradicional de antes de la subversión.

Lo que funciona para mí es: svn di --diff-cmd=diff -x --normal

El --normal opción (en el diff que se incluye con OS X) da el formato tradicional de que algunas personas prefieren.

Cuestiones relacionadas