2010-01-02 11 views
14

¿Hay alguna manera de aplicar un solo trozo desde un diff a un archivo? Por ejemplo, digamos que hago un diff del archivo A y B, y que produce tres trozos de diferencias, cada uno denotan con algo así como ...Cómo parchar solo un trozo particular de un diff

@@ -971,30 +977,28 @@ 

... (en el caso de unificados diff) . Quisiera poder alimentar ese diff en stdin, y pedir parche para solo aplicar trozo N.

El método manual sería cortar y pegar los trozos interesantes, pero no estoy después de eso una especie de solución.

+0

En mi experiencia pasada, no es muy difícil leer un contexto diff en un editor y podarlo. Realmente no veo la ventaja de una estructura de argumento compleja para el parche sobre eso. ¿Hay algo en particular que trates de hacer que lo haga intratable? – bmargulies

+0

Digámoslo de esta manera: si el parche * no * lo soportó, yo * lo usaría *. Tengo algunas macros de vim que eliminan la sintaxis de diff para que no sea tan malo, pero sería más fácil simplemente escribir un solo comando. – Cyrus

Respuesta

0

Algunas de las herramientas GUI diff/patch tienen una forma de seleccionar bloques o incluso líneas individuales. Sé que TortoiseDiff de TortoiseSVN puede funcionar de esta manera. Creo que lo he visto hacer viento, pero ha pasado un tiempo desde que tuve que usarlo.

En cuanto a las herramientas de línea de comandos, no he visto nada que haga lo que estás pidiendo.

+0

No pude encontrar nada en la página de manual, pero creo que debe existir, y es solo mi incapacidad para encontrarlo. Entonces, el parche en sí no tiene soporte nativo para esto, ¿es eso exacto? – Cyrus

7

filterdiff podría ayudar.

Permite la extracción de un subconjunto de parches que coinciden con una variedad de requisitos, desde uno/muchos archivos de parche. Por ejemplo, aquí se extrae desde el archivo unified_diff.patch, los parches aplicables a los archivos con nombre coincidente one_file.c, sólo para líneas de 950 a 1050 el archivo original:

filterdiff -i *one_file.c --lines=950,1050 unified_diff.patch 

Para extraer específica/gama de trozos:

filterdiff --hunks=1,3,5-8,15 file.patch 

Extracción de parches de mensajes de correo:

filterdiff message-with-diff-in-the-body > file.patch 

etc.

+0

Agradable, muy útil. – Nelson

Cuestiones relacionadas