Gibt es eine Möglichkeit, Dateien von C++ zu unterscheiden?

Lesezeit: 3 Minuten

Ich suche nach einer C- oder C++-Diff-Bibliothek. Ich weiß, dass ich das Unix benutzen kann diff Werkzeug in Kombination mit system oder exec, aber ich möchte wirklich eine Bibliothek. Es wäre praktisch, wenn die Bibliothek auch Patches ausführen könnte, wie das Unix patch Werkzeug.

  • Es scheint mir, dass eine Diff-Bibliothek ziemlich verbreitet wäre, aber Google hat noch keine gute Antwort gefunden.

    – Matt Fichmann

    21. September 2009 um 19:28 Uhr

  • Ein ausgezeichneter Ansatz wurde für C/C++ in einem ähnlichen Beitrag bereitgestellt.

    – Wolke

    22. Februar 2017 um 22:53 Uhr

Benutzer-Avatar
Matt Fichmann

Ich glaube, ich habe endlich eine gute Lösung gefunden:

Das DTL – Diff-VorlagenbibliothekLernprogramm

Es unterstützt Patches. Ich musste “diff.cpp” in Google eingeben, um es zu finden. Hoffentlich funktioniert es!

Es scheint wie die Google Diff-, Match- und Patch-Bibliotheken sind, was Sie brauchen.

  • Eh, aber die C++-Version dieser Bibliothek ist von Qt abhängig. Ich brauche eine Diff/Patch-Bibliothek für eine Nicht-GUI-Anwendung.

    – Matt Fichmann

    20. September 2009 um 23:46 Uhr

  • Qt hat Nicht-GUI-Teile und kann in einer Konsolenanwendung verwendet werden.

    – Rechnung

    24. September 2009 um 17:03 Uhr

  • Qt ist eine große Bibliotheksabhängigkeit, die ich nicht haben möchte. Warum hat der Autor STL nicht verwendet?

    – Matt Fichmann

    29. September 2009 um 20:48 Uhr

  • Ein STL-Port ist auf GitHub verfügbar.

    – Josh Kelley

    20. Oktober 2014 um 20:19 Uhr

  • Das ist definitiv besser als DTL (das anscheinend keinen Per-Line-Diff-Algorithmus bietet)

    – jpo38

    24. November 2016 um 20:29 Uhr

Dies ist eine Implementierung einer “Lösung für SES/LCS mit der linearen Raumverfeinerung von Hirschberg, wie in der folgenden Veröffentlichung beschrieben”:

E. Myers, „An O(ND) Difference Algorithm and Its Variations“, Algorithmica 1, 2 (1986), 251-266.
http://www.cs.arizona.edu/people/gene/PAPERS/diff.ps

Gefunden auf der Wikipedia-Seite zu diff.

Das ist jedoch nur zum Finden eines Diffs, nicht zum Anwenden als Patch. Ich denke, dass die Anwendung eines Patches tatsächlich ein schwierigeres Problem ist; wegen Konfliktgefahr. Es würde irgendeine Form von benutzerkontrollierendem Feedback-Mechanismus benötigen, um Konflikte zu lösen.

  • Dies ist die beste Antwort, die ich bisher gegeben habe, aber ich hätte auch gerne eine Patch-Bibliothek. Ich warte noch ein wenig ab, ob noch jemand eine Antwort hat.

    – Matt Fichmann

    24. September 2009 um 16:48 Uhr

  • Die Datei diff.c am Anfang verlinkt scheint verschwunden zu sein. (Es ist aber immer noch im Google-Index …)

    – Tanuva

    24. Juli 2017 um 9:02 Uhr

  • @unwind Oh mein Gott, es tut mir leid. Nur der https-Transport führt zu einem 404-Fehler. Das Deaktivieren von HTTPS Everywhere führt dazu, dass die Datei geladen wird.

    – Tanuva

    24. Juli 2017 um 14:26 Uhr


Es gibt einen, der Teil davon ist Quecksilber. Es existiert als C-Code, der als Python-Erweiterung entworfen wurde, aber es könnte wahrscheinlich ziemlich einfach extrahiert werden. Ich glaube, es kann auch binäre Diffs machen.

Die relevanten .c-Dateien sind mercurial/bdiff.c, mercurial/mpatch.c und möglicherweise mercurial/diffhelpers.c.

Subversion enthält eine Bibliothek libsvn_diff.

Benutzer-Avatar
Tomate

Auch ziemlich unauffindbar in Google, es stellt sich heraus, dass Gnulib eine hat Diff-Modul. Dieser scheint ausreichend für das zu sein, wofür ich eine Diff-Bibliothek wollte. Es scheint jedoch kein Patch-Modul zu haben.

1384680cookie-checkGibt es eine Möglichkeit, Dateien von C++ zu unterscheiden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy