2013-06-03 19 views
8

mi piacerebbe unire due file nel modo seguente:unire manualmente due file utilizzando diff

  1. uscita il diff dei due file in un file temporaneo e
  2. selezionare manualmente le righe voglio copiare/salvare.

Il problema qui è che diff -u mi fornisce solo un file di linee di contesto, mentre voglio produrre l'intero file in un formato unificato.

C'è qualche modo diff può farlo?

+0

Conosco un sacco di gente come l'utilizzo di vim in modalità diff per fare questo, e ci sono alcuni plugin che fanno tre buffer (vecchio, unione, 'nuovo') funzionano meglio. – demure

+0

Qual è il problema? Eliminare solo le parti della patch che non si desidera avere e quindi correggere il file. Nota anche su [git cherry picking] (https://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html). Questo è esattamente quello che vuoi fare – hek2mgl

risposta

6

"Voglio esportare l'intero file in un formato unificato. C'è qualche modo in cui diff può farlo?"

Sì.

diff -U 9999999 file1.txt file2.txt > diff.txt 

Questo dovrebbe funzionare, purché i file siano lunghi meno di 10 milioni di righe.

10

Una possibilità che potrebbe andare bene il disegno di legge per voi,

sdiff: side-by-side diff dei file.

sdiff -o merged.file left.file right.file

Una volta lì, vi verrà chiesto con quali linee si vuole evitare di quale file. Hit ? e poi enter per un piccolo aiuto. Anche man sdiff con i beni dettagliati.

(Nella mia distro, questi vengono confezionati nel pacchetto "Diffutils" [Fedora, CentOS])

Se è necessario automatizzare il processo, si potrebbe desiderare di provare l'util merge, che segnerà conflitti in i file. Tuttavia, questo potrebbe riportarti al punto di partenza.

0

La risposta facile è usare il flag -D per unire i file e circondare le differenze con le istruzioni #ifdef in stile C.

Dalla documentazione:

-D NAME --ifdef=NAME 
      Output merged file to show `#ifdef NAME' diffs. 

si può utilizzare come segue:

$ diff -D NEWSTUFF file1 file2 > merged_file 

Io di solito poi basta aprire il file unito in un editor e risolvere i conflitti di unione a mano.

È inoltre possibile utilizzare le opzioni per l'output uno script ed, ecc

0

È possibile unire/combinare i due file con diff uso -

diff --line-format %L file1 file2