SourceForge.net Logo
17. April 2002
© GPL
 
ProWikiZentrum
Anregung Verbesserte Diffs
 
Von WikiAnregungen

Die Diffs könnte man noch verbessern. Falls in einem ganzen Abschnitt nur wenig geändert wird, so ist es zum Teil schwierig die Änderungen zu finden. XEmacs (und sehr wahrscheinlich auch Emacs) löst das in diesem Fall ganz gut: zusätzlich zur farblichen Hervorhebung der verschiedenen Zeilen werden auch noch die geänderten Worte in einer anderen Farbe hervorgehoben.

Das sähe dann vielleicht so aus:

Die Diffs könnte man noch verbessern. Falls in einem ganzen Abschnitt nur wenig geändert wird, so ist es zum Teil schwierig die Änderungen zu finden. Emacs (und sehr wahrscheinlich auch XEmacs) löst das in diesem Fall ganz gut: zusätzlich zur farblichen Hervorhebung der verschiedenen Zeilen werden auch noch die geänderten Worte in einer anderen Farbe hervorgehoben.

Die Diffs könnte man noch verbessern. Falls in einem ganzen Abschnitt nur wenig geändert wird, so ist es zum Teil schwierig die Änderungen zu finden. XEmacs (und sehr wahrscheinlich auch Emacs) löst das in diesem Fall ganz gut: zusätzlich zur farblichen Hervorhebung der verschiedenen Zeilen werden auch noch die geänderten Worte in einer anderen Farbe hervorgehoben.

--ThomasHolenstein


Dein Vorschlag ist wirklich atemberaubend schön! Du kannst dir nicht vorstellen, wie viele hundert Male ich im WardsWiki schon nach solchen Änderungen gesucht habe. Emacs ist natürlich für so etwas besser gerüstet als die Wiki-Perlscripts, die sich des externen diff-Programms zur Erstellung der Zeilendiffs bedient. Aber irgendwie muss das gehen! --hl

Auch Emacs verwendet diff, erstaunlicherweise. Ich hab mal gerade in den sourcen von emacs rumgewühlt. Das ganze findet sich in einem file ediff-diff.el in der Methode ediff-make-fine-diffs (nur zur Referenz, falls benötigt). Das ganze scheint so zu funktionieren, dass Regionen, welche korrespondieren (also Zeilen oder Zeilengruppen die geändert wurden) bis zu einer gewissen maximalgrösse in Worte aufgeteilt werden. Jedes Wort kommt auf eine eigene Zeile und das wird dann auch ins diff gefüttert. Sollte eigentlich auch hier klappen, wenns auch ein bischen ein Hack ist.... --thh

Ich habe schon in die gleiche Richtung gedacht und bin vor dem Hack zurückgeschreckt. Vermutlich sollte man unterscheiden, ob es sich um wenig kleine Änderungen handelt (dann ist obiges toll), oder ob eine substanzielle Überarbeitung vorliegt (dann könnte ein wildes Patchwork entstehen)? --hl

Könnte man. Hab mir das mal im emacs angeschaut, und da gibts das Phänomen des wilden Patchworks tatsächlich. Man kann dann halt durch Tastendruck das so genannte refinement abschalten, was beim Wiki möglich wäre, wenn auch nicht so einfach. Wie auch immer, auch mit refinement sind Änderungen gut sichtbar: ich erkenne sofort dass das eben eine grössere Änderung ist und das Patchwork keine Bedeutung hat. Unschön ist es trotzdem. --thh

Man könnte ja die Anzahl (oder Gesamtlänge) der deletes/inserts in Beziehung setzen zum gesamten Absatz. Vermutlich wird es bei 10-25% geänderter Worte unübersichtlich. Das ließe sich ja tunen, bzw. vom Benutzer in seinen persönlichen Einstellungen (Detailiertes Diff bis __% geänderter Worte) vorgeben. --hl

Ja. Allerdings möchte ich dich an WardsWiki:DoTheSimplestThingThatCouldPossiblyWork erinnern. Vielleicht sollte man einfach mal die dumme Variante und den obigen Hack probieren. Wenn das nicht gut ist, kann man das immer noch so machen.

Wahrscheinlich hast du recht. Ich habe allerdings auch C-Code herumliegen, der direkt die optimale Umwandlung zweier Strings ermittelt (Allerdings ohne Worte zu respektieren). Das Interfacing wäre einfacher, allerdings vermutlich eine Optimierung für die Performance bei langen Strings (ähnlich DseWiki:SoftwareDenkSport_1_Auflösung; Suche des längsten gemeinsamen Substrings) notwendig. --hl

Als weitere Anregung habe ich soeben das Programm wdiff auf dem Internet entdeckt. Das scheint zwar im Moment auch nichts anderes zu machen als diff mit Worten in Zeilen aufzurufen, aber ist etwas weniger hacky. Ich weiss nicht wo man das kriegt, das haengt aber sowieso von deiner Installation ab. -- th

OrdnerEntwicklung