2010-01-02 3 views
14

C'è un modo per applicare un singolo hunk da un diff a un file? Ad esempio, dire fare un diff da file A e B, e che produce tre pezzi di differenze, ognuno indicato con qualcosa di simile ...Come applicare una patch solo a un particolare da un diff

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

... (nel caso di unificate diff) . Vorrei quindi essere in grado di alimentare tale diff in stdin e chiedere patch per applicare solo hunk N.

Il metodo manuale sarebbe quello di tagliare e incollare gli hunk interessanti, ma non lo farò dopo tipo di soluzione.

+0

Nella mia esperienza passata, non è molto difficile leggere un contesto diff in un editor e sfoltirlo. Non vedo davvero il vantaggio di una struttura argomentativa complessa per la patch. C'è qualcosa in particolare che stai cercando di fare che rende questo intrattabile? – bmargulies

+0

Mettiamola così - se la patch * l'ha * supportata - io * lo userei. Ho alcune macro vim che rimuovono la sintassi diff, quindi non è male, ma sarebbe più semplice scrivere semplicemente un singolo comando. – Cyrus

risposta

0

Alcuni degli strumenti di differenza/patch della GUI consentono di selezionare blocchi o anche singole righe. So che TortoiseDiff di TortoiseSVN può funzionare in questo modo. Penso di aver visto Windiff farlo, ma è passato un po 'di tempo da quando ho dovuto usarlo.

Per quanto riguarda gli strumenti da riga di comando, non ho visto nulla che faccia quello che chiedi.

+0

Non riuscivo a trovare nulla nella pagina man, ma sentivo che doveva esistere - ed è solo la mia incapacità di trovarlo. Quindi - la patch stessa non ha supporto nativo per questo - è così preciso? – Cyrus

7

filterdiff potrebbe aiutare.

Consente l'estrazione di sottoinsieme di patch che soddisfano una varietà di requisiti, da uno/molti file di patch. Ad esempio, qui si estrae dal file unified_diff.patch, le patch applicabili agli archivi con il nome di corrispondenza one_file.c, solo le linee di 950-1050 del file originale:

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

Per estrarre specifica/gamma di Hunk:

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

Estrazione patch da messaggi di posta elettronica:

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

ecc

+0

Bello, molto utile. – Nelson