Wie funktioniert Diff / Patch und wie sicher sind sie?

ei der Frage, wie sie funktionieren, habe ich mich gewundert, was auf niedriger Ebene funktioniert:

Was löst einen Zusammenführungskonflikt aus? Wird der Kontext auch von den Tools verwendet, um den Patch anzuwenden?Wie gehen sie mit Änderungen um, die das Verhalten des Quellcodes nicht ändern? Beispiel: Funktionsdefinitionsorte tauschen.

In Bezug auf Sicherheit ist das riesige Linux-Kernel-Repository ein Beweis für ihre Sicherheit. Aber ich wundere mich über die folgenden Punkte:

Gibt es irgendwelche Einschränkungen in Bezug auf die Werkzeuge, die dem Benutzer bekannt sein sollten?aben die Algorithmen bewiesen, dass sie keine falschen Ergebnisse lieferWenn nicht, gibt es Implementierungen / Papiere, die Integrationstests vorschlagen, die zumindest empirisch beweisen, dass sie fehlerfrei sind? So etwas wie der Inhalt dieser Papiere BrianKorver und JamesCoplien.Again, das Linux-Repository sollte in Bezug auf den vorherigen Punkt ausreichen, aber ich habe mich über etwas generischeres gewundert. Auch wenn der Quellcode geändert wird, ändert sich nicht viel (insbesondere aufgrund des implementierten Algorithmus und der Syntaxbeschränkungen). Kann die Sicherheit jedoch auf allgemeine Textdateien verallgemeinert werden?Bearbeite

Ok Leute, ich bearbeite gerade, da die Frage vage ist und die Antworten keine Details enthalten.

Git / diff / patch details

Das einheitliche Diff-Format, das Git standardmäßig zu verwenden scheint, gibt im Wesentlichen drei Dinge aus: die Änderung, den Kontext, der die Änderung umgibt, und die Zeilennummern, die für den Kontext relevant sind. Jedes dieser Dinge kann oder kann nicht gleichzeitig geändert worden sein, so dass Git sich grundsätzlich mit 8 möglichen Fällen befassen muss.

Wenn beispielsweise Zeilen vor dem Kontext hinzugefügt oder entfernt wurden, unterscheiden sich die Zeilennummern. aber wenn der Kontext und die Änderungen immer noch gleich sind, könnte diff den Kontext selbst verwenden, um die Texte auszurichten und den Patch anzuwenden (ich weiß nicht, ob dies tatsächlich passiert). Was würde nun in den anderen Fällen passieren? Ich möchte Einzelheiten darüber erfahren, wie Git beschließt, Änderungen automatisch anzuwenden, und wann es beschließt, einen Fehler auszugeben und den Benutzer den Konflikt lösen zu lassen.

Verlässlichkei

Ich bin mir ziemlich sicher, dass der Git absolut zuverlässig ist, da er die vollständige Historie der Commits enthält und die Historie durchlaufen kann. Was ich möchte, sind einige Hinweise auf akademische Forschungen und Referenzen dazu, falls vorhanden.

Still irgendwie mit diesem Thema verbunden, wir wissen, dass Git / diff Dateien als generische Textdateien behandeln und auf Zeilen arbeiten. Darüber hinaus generiert der von diff verwendete LCS-Algorithmus einen Patch, der versucht, die Anzahl der Änderungen zu minimieren.

Also hier sind einige Dinge, die ich auch gerne wissen würde:

Warum wird LCS anstelle anderer String-Metrik-Algorithmen verwendet?Wenn LCS verwendet wird, warum nicht modifizierte Versionen der Metrik verwenden, die die grammatikalischen Aspekte der zugrunde liegenden Sprache berücksichtigen?Wenn eine solche Metrik verwendet wird, die grammatikalische Aspekte berücksichtigt, könnten sie Vorteile bringen? Vorteile in diesem Fall können beispielsweise ein saubereres "Schuldprotokoll" sein.

Again, das könnten große Themen sein und wissenschaftliche Artikel sind willkommen.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage