2010-07-29 11 views
5

diff genellikle oldukça clueless bir çıktı üretir. İşte güzel bir örnek. biz bu başlatırsanız:GNU farkları için alternatifler?

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

ikinci yöntem bırakın ve değiştirmek ilk:

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

diff -u toplam karışıklık olacak - iki yöntem öne birleştirildi:

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

Bunun yerine daha makul:

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

Bu sadece bir oyuncak örneğidir, bu nedenle diff'un çıkışının anlaşılması hala mümkündür - pratikte genelde çok daha kötüdür.

diff için biraz daha akıllı olabilecek alternatifler var mı?

+1

Sadece CLI ister misiniz yoksa KDIFF gibi grafik uygulamalar sizin için çalışır mı? –

+0

Evet, söyleyecektim. Kompare aslında orada en iyi zorluklardan biri, IMO. Eğer çıktıyı ayrıştırmıyorsanız, GUI tabanlı diffs ile çalışmak CLI diff'den çok daha kolaydır. – Gilead

+1

Kötü diffs için daha iyi görüntü istemiyorum, iyi diffs istiyorum. [Bu alakalı olabilir gibi görünüyor] (http://alfedenzo.livejournal.com/170301.html). – taw

cevap

1

SD Smart Differencer adresimizi inceleyebilirsiniz. "Çizgi farkları" yerine kodun yapısına bağlı olarak farklılıklar sağlar, dolayısıyla dil öğelerine (ifadeler, ifadeler, bloklar, yöntemler) ve düzenleme eylemlerine (silme, ekleme, kopyalama, değiştirme, yeniden adlandırma) odaklanır.

Bu dile özgüdür; dil yapısını rehber olarak kullanmak olmalı. Açık bir langauge tanımı kullanır. Kullandiginiz langageyi tam olarak anlayamıyorum (Python?). C, C++, C#, Java, Python, Fortran, COBOL, ... dahil olmak üzere birçok drupa için Smart Differencer araçları vardır.

+1

Örnek, Ruby'de. Akıllı Differencer, Windows-only, istediğim çoğu dil için destek olmadan (ve C preprocessor hakkında ne söylediklerini, çoğu C'yi bile fark edemeyeceğini ima ediyor) kapalı kaynak (geliştirme araçları için çok kötü bir fikir) ve Hiç çalışıp çalışmadığını görmek için bir deneme indirmesinin mevcut olup olmadığından emin değilim. Belki başka bazı insanlar yararlı bulacaktır. – taw

+0

Hangi dilleri beğendiniz? Evet, önişlemci yönergeleri ve makro çağrıların rastgele yerleştirilmesi nedeniyle C koduyla ilgili sınırlamalar vardır; bunlar, keyfi C kodunda kod yapısını tanımlamayı çok zorlaştırır. Şu anda Ruby ile çalışmıyor; Bir Ruby dili tanımıyla çaldık ama henüz hazır değil .. Evet, kapalı kaynak; Açık kaynak kodlu bir versiyon yazabilirsiniz.Bunlardan hiçbirini sorunundaki kısıtlamalardan biri olarak söylemedin. Java, C# ve C++ gibi çok çeşitli diller için değerlendirme sürümleri mevcuttur. Web sitesinde sormanız gerekebilir –

1

Tam olarak istediğiniz şeyi yapan bir fark algoritması üzerinde çalışıyorum, ancak bu algoritma Ben üzerinde çalışmanın farklı süreçler için kaynak sayısı üzerinde bir sınırı yoktur. Şu anda beta ve hala test ediliyor ve bu test tamamlanana kadar satır içi görünüm işlevsel değil. Lütfen düzeltin ve uygun düzeltmeleri sağlayabilmem için fark raporunu nasıl kırabileceğinizi bana bildirin.

Sitesi:

enter image description here

aracı GNU diff ve WDiff kullanır: http://prettydiff.com/ (GitHub)