2011-09-20 10 views
21

Scenario: Ho un file patch che si applica in modo pulito ai miei file di lavoro, ma non voglio tutte le modifiche dalla patch.Come modificare un file diff/patch in modo pulito? Esistono editor di file di patch?

Di solito, faccio vim example.patch, rimuovo le modifiche indesiderate e li applicano patch -p0 -i example.patch ma a volte la patch non si applica in modo pulito, e devo ricominciare da capo.

Esiste un editor di file di patch che consente agli utenti di modificare ed eliminare parte della patch e può comunque essere applicato in modo pulito?

+0

Perché non creare una seconda patch? – Johnsyweb

+2

Vedere http://stackoverflow.com/questions/242646/use-vimdiff-with-a-diff-file – dmedvinsky

+0

ho bisogno qui. Ho bisogno di modificare i file di patch prima dell'applicazione e non c'è modo di generare altre patch. Quindi: esiste un editor di file di patch che consente agli utenti di modificare e/o eliminare parte della patch ed è ancora in grado di applicare in modo pulito? –

risposta

1

Non modificare manualmente i file di patch. Nel tuo caso, puoi provare uno strumento interattivo per applicare il tuo pezzetto di patch, come ipatch

14

Se apri un file diff in emacs e metti l'editor in modalità "diff", puoi effettivamente modificare le patch e si aggiornerà i marcatori di mazza in modo intelligente. Funziona davvero bene per me!

+0

Sì! Grazie! Questo lo fa perfettamente! –

2

Quale SCM si utilizza? se si utilizza Git è possibile:

  • Prima di generare utilizzare la patch attuale git add -p per aggiungere solo parti delle modifiche. È buona norma generare commit più piccoli con solo modifiche correlate (tuttavia ad alcune organizzazioni non piace e consente solo un mega commit).

  • Se la patch è già applicata, utilizzare git add -p per aggiungere le parti del codice che si desidera mantenere all'indice. Puoi commettere e buttare via il resto (git co .) o metterlo da parte (git stash).

modifica (in base alla git aggiungi commento -p)

  • git add -p permette di dividere un pezzo in parti più piccole utilizzando l'opzione s, nei casi in cui hai bisogno di maggiori dettagli è necessario utilizzare l'opzione e per modificare, che ti porterà al tuo editor gitconfig e avrà le istruzioni su come modificare il hunk.
+0

Ho questo problema esattamente quando uso 'git add -p' (ad esempio in" Modalità modifica manuale Hunk ") poiché a volte non è possibile dividere il diff in hunks puliti e sono necessarie alcune modifiche manuali del diff. – Jawa

+0

Il problema con 'git add -p' è che offre solo una piccola parte della funzionalità che' git diff' (e il suo driver sottostante) offre. Per esempio, se voglio dare un senso alle modifiche che ho fatto prima di impegnarmi, usare '-w' flag per' git diff' per ignorare lo spazio bianco, che mi aiuta nil se voglio 'git add -p' alcuni di questi cambiamenti in modo interattivo, perché non c'è '-w' per' git add'. Quello che fanno le persone è che generano il file di patch con 'git diff -w ...' e poi usano 'git apply', ma questo li riporta di nuovo ad un editor di patch - dal momento che' git add' non è lì per aiutare loro. – amn

5

Se stai cercando una soluzione non interattiva, rediff da patchutils è di aiuto.

Ecco la sua descrizione man:

È possibile utilizzare rediff per correggere un diff unificato modificato a mano. Prendete una copia del diff che volete modificare e modificatela senza cambiare offset o conteggi (le righe che iniziano "@@"). Quindi esegui il rediff, indicando il nome del file diff originale e il nome di quello che hai modificato con ed eseguirà il file diff modificato ma con offset e conteggi corretti.

Un piccolo script, editdiff, è fornito per la modifica di un file diff sul posto.

I tipi di cambiamenti che sono attualmente gestite sono:

  • Modificare il testo di qualsiasi linea contenuto del file (ovviamente).
  • Aggiunta di nuovi inserimenti o eliminazioni di riga.
  • Aggiunta, modifica o rimozione di linee di contesto. Le linee nell'orizzonte di contesto vengono gestite regolando l'offset e/o il conteggio.
  • Aggiunta di un singolo pezzo (@@ - sezione con prefisso).
  • Rimozione di più hunk (@@ - sezioni con prefisso).

Sulla base della sua descrizione, recountdiff potrebbe anche essere un potenziale candidato per risolvere diff unificati.

Problemi correlati