# SVN "diff"-Funktion



## Gist (20. Okt 2011)

Hi,

ich hab heute in der Vorlesung über den Algorithmus von Myers gehört, der wohl zum Unterscheiden von Änderungen u.a. auch in SVN verwendet wird. 
Der Algorithmus vergleicht ja Zeichenketten und ermittelt die kürzeste Varianten an Delete/Insert Operationen, um aus den ursprünglichen String den Zielstring zu machen.

Das ganze hab ich so weit auch verstanden, nicht weiter schwer gewesen. Was ich aber im Bezug auf Source-Files nicht verstehe, ist die Handhabung von Zeilenumbrüchen. Sobald ich eine Zeile hinzufügen oder löschen kann ich ja nicht länger die 1:1 Beziehung zwischen der Linie aus dem Quell-Dokument mit der Linie aus dem neuen Dokument herstellen.
Sobald ich also löschen/einfüge verschiebt sich alles und dementsprechend würde ab einer gelöschen/hinzugefügten Linie alles als geändert erscheinen. 

Tut es aber in der praktischen Anwendung nicht, wieso? Wie wird die Beziehung von Linien hergestellt? Berechnet man einen Hashwert für eine Zeile und guckt ob man diese weiter unten/oben wiederfindet, oder wie funktioniert das?

Danke für Antwort.


----------



## TheDarkRose (20. Okt 2011)

Nun ja, bei SVN werden nur Deltas gespeichert, also die Änderung zur vorherigen Version. Darum ist SVn relativ platzsparend.

Und bei richtigen diff Programmen wird IMHO wirklich Zeilenweiße verglichen oder so.


----------



## SlaterB (20. Okt 2011)

ist doch letzlich ziemlich egal wie es implementiert ist,
das auf gleiche Zeilen geachtet wird, zwischen denen neue Blöcke erscheinen dürfte ziemlich schnell klar, von Anfang an zentrale Grundfunktion sein, was auch sonst?

Hashwert pro Zeile ist eine naheliegende Idee, ganz unabhängig vom konkreten Anwendungsgebiet, 
Hash-Wert + equals ist ein Grundlage von Vergleichen/ Suche, prominente Grundmethoden der Object-Klasse in Java,
besonders wenn nicht Sortierung/ Reihenfolge als alternativer Standard zur Verfügung steht, wie in diesem Fall


----------

