Vergleichen Sie Konfigurationstexte ohne Kontextzeilen
Setzen Sie die Kontextzeilen auf Null, bevor Sie das Diff herunterladen. Wenn sich ein Wert am Anfang und ein anderer am Ende ändert, enthält die Ausgabe zwei kleine @@-Hunks mit nur entfernten und hinzugefügten Zeilen; Eine unveränderte Konfiguration bleibt vom Patch ausgeschlossen, beteiligt sich jedoch weiterhin an der Suche nach dem minimalen Bearbeitungsskript.
Einheitlicher Diff-Patch
Ein Standard-Patch --- / +++ mit @@-Bereichen, ausgewähltem Kontext und expliziten Markierungen für fehlende letzte Zeilen.
Das komplette Zeilenbearbeitungsskript
| Removed | 1 | host=localhost | |
| Added | 1 | host=127.0.0.1 | |
| Unchanged | 2 | 2 | port=3000 |
| Unchanged | 3 | 3 | mode=development |
| Removed | 4 | cache=false | |
| Added | 4 | cache=true |
Der Nullkontext ändert nicht, welche Zeilen Hinzufügungen oder Löschungen sind; es ändert nur, wie viel unverändertes Material sie umgibt.
Entfernte Änderungen bleiben separate Abschnitte, anstatt durch Zeilen verbunden zu werden, die zur Beschreibung der Änderungen nicht erforderlich sind.
Die Bearbeitungstabelle auf der Seite listet weiterhin das vollständige Skript auf, während das Patch-Artefakt dem ausgewählten kompakten Kontext folgt.
So funktioniert es
So wird es gemacht
- CRLF und einzelne CR-Zeilenenden werden auf LF normalisiert, während aufgezeichnet wird, ob die letzte logische Zeile jedes Dokuments einen abschließenden Zeilenumbruch hat.
- Erstellen Sie eine Matrix mit der längsten gemeinsamen Teilsequenz über den gesamten Zeilentext und seinen Beendigungsstatus und wählen Sie das Löschen vor dem Einfügen aus, wenn mehrere Mindestskripts übereinstimmen.
- Erweitern Sie jede geänderte Bearbeitung um die erforderliche Anzahl unveränderter Kontextzeilen und führen Sie Bereiche, die sich berühren oder überlappen, zu einheitlichen Diff-Hunks zusammen.
- Schreiben Sie bereinigte ---- und +++-Beschriftungen, den genauen @@-Start, Zählbereiche und Leerzeichen sowie Minus- oder Plus-Zeilenpräfixe in einen herunterladbaren Patch.
Wovon es ausgeht
- Der Vergleich erfolgt zeilenbasiert und nach der Zeilenumbruchnormalisierung exakt. Unterschiede zwischen Leerzeichen, Groß- und Kleinschreibung und Unicode-Normalisierung werden nicht ignoriert.
- Jede Seite ist auf 2.000 Zeichen begrenzt, wodurch die quadratische Matrix der längsten gemeinsamen Teilsequenz im Browser begrenzt bleibt.
- Es kann mindestens ein Bearbeitungsskript vorhanden sein. Bindungen, die zuerst gelöscht werden, machen diese Ausgabe wiederholbar, aber nicht eindeutig mathematisch privilegiert.
- Ein syntaktisch erstellter Patch kann immer noch gegen eine dritte Datei fehlschlagen, deren umgebender Inhalt sich geändert hat; Dieses Tool wendet keine Patches an oder führt sie zusammen.
Fragen
Ist ein einheitliches Null-Kontext-Diff immer noch ein gültiger Patch?
Ja. Seine Bereichsheader können alte oder neue Bereiche der Länge Null enthalten, und jede geänderte Zeile hat weiterhin das erforderliche Plus- oder Minus-Präfix.
Wann sollte ich stattdessen Kontextzeilen beibehalten?
Behalten Sie den Kontext bei, wenn eine Person die umgebende Bedeutung überprüfen muss oder wenn ein Patch auf eine Datei angewendet wird, die sich seit dem Vergleich möglicherweise verschoben hat.
Quellen
Die vollständige Methode, das Rechenbeispiel und alle Annahmen hinter diesem Ergebnis stehen auf Text-Diff-Maker.