2010-07-29 23 views
5

diff produce in genere un output senza tracce. Ecco un buon esempio. Se cominciamo con questo:Alternative a GNU diff?

class World 
    def hello 
    puts "Hello, world" 
    end 
    def goodbye 
    puts "Goodbye, world" 
    end 
end 

cadere il secondo metodo e cambiare la prima:

class World 
    def hello 
    puts "Hello, #{self}" 
    end 
end 

diff -u sarà un totale disastro - che suggerisce due metodi sono state fuse:

class World 
    def hello 
- puts "Hello, world" 
- end 
- def goodbye 
- puts "Goodbye, world" 
+ puts "Hello, #{self}" 
    end 
end 

Invece di molto più ragionevole:

class World 
    def hello 
- puts "Hello, world" 
+ puts "Hello, #{self}" 
    end 
- def goodbye 
- puts "Goodbye, world" 
- end 
end 

Questo è solo un esempio di giocattolo, quindi l'output di diff è ancora possibile da capire - in pratica di solito peggiora molto.

Esistono alternative a diff che potrebbero essere un po 'più intelligenti?

+1

Vuoi solo CLI, o applicazioni grafiche come KDIFF funzionano per te? –

+0

Sì, stavo per dire. Kompare è in realtà uno dei migliori diff fuori là, IMO. Se non si sta analizzando l'output, le differenze basate sulla GUI sono molto più facili da gestire rispetto alla diff CLI. – Gilead

+1

Non voglio una visualizzazione migliore per le differenze negative, voglio diff buone. [Sembra che potrebbe essere rilevante] (http://alfedenzo.livejournal.com/170301.html). – taw

risposta

1

Si potrebbe considerare il nostro SD Smart Differencer. Fornisce differenze basate sulla struttura del codice piuttosto che sulle "differenze di linea", quindi si concentra sugli elementi del linguaggio (espressioni, istruzioni, blocchi, metodi) e sulle azioni di modifica (cancella, inserisci, copia, sostituisci, rinomina).

È un linguaggio specifico; deve essere usare la struttura del linguaggio come guida. Usa una definizione esplicita di langauge. Non riesco a capire quale langauge stai usando (Python?). Esistono strumenti Smart Differencer per molte lingue, tra cui C, C++, C#, Java, Python, Fortran, COBOL, ...

+1

L'esempio è in Ruby. Smart Differencer sembra essere solo per Windows, senza supporto per la maggior parte delle lingue che voglio (e quello che dicono sul preprocessore C implica che non sarà nemmeno in grado di diffondere la maggior parte C), closed source (pessima idea per gli strumenti di sviluppo), e Non sono nemmeno sicuro che sia disponibile un download di prova per vedere se funziona. Forse alcune altre persone lo troveranno utile. – taw

+0

Che lingue volevi? Sì, esistono limitazioni con il codice C a causa del posizionamento arbitrario delle direttive del preprocessore e delle macro chiamate; questi rendono molto difficile identificare la struttura del codice nel codice C arbitrario. Attualmente non funziona con Ruby; abbiamo suonato con una definizione in linguaggio Ruby ma non è ancora pronta. Sì, è closed source; siete invitati a scrivere una versione open source.Non hai indicato nessuno di questi come vincoli nella tua domanda. Sono disponibili versioni di valutazione per un'ampia varietà di lingue, tra cui Java, C# e C++. Potrebbe essere necessario chiedere al sito web –

1

Sto lavorando su un algoritmo diff che fa esattamente quello che vuoi, ma questo algoritmo lo sono lavorando su non ha limiti sul numero di fonti per il processo diff. Attualmente è in beta e ancora in fase di test e fino a quando questo test non è completo, la vista in linea non è funzionale. Si prega di controllare e fammi sapere se e come è possibile interrompere il rapporto diff in modo che possa fornire le correzioni appropriate.

sito: http://prettydiff.com/ (GitHub)

2

Il rfcdiff (Progetto Diff Tool) segnalato questo:

enter image description here

Lo strumento utilizza GNU diff e wdiff.