Frage

Was ich an fossil ist, dass es nur alte SQLite zum Speichern von Changesets verwendet, Dateien usw. ich kann seine Kommandozeilen-Tool verwenden, um die Repository abzufragen, aber wenn ich will etwas von ihm nicht unterstützt, kann ich Rückfall eine sQL-Abfrage zu schreiben.

Mercurial und Git sind mehr reifen, sie mehr Bibliotheken, mehr Dynamik, aber sie benutzen ihr eigenes Repository-Format. Ich frage mich, ob es möglich ist, SQLite als Repository-Backend zu haben. (Ich weiß, gibt es Tools, einen Quecksilber-oder git Repo direkt abfragen, aber SQL scheint einfacher.)

War es hilfreich?

Lösung

Mit git, ist das Repository-Format ein ziemlich wesentlicher Bestandteil der alles funktioniert Art und Weise. Sie müßten eine Menge Arbeit zu ändern tun.

Ich habe keine von Mercurial Quelle lesen, aber ich glaube, die Situation nicht viel anders ist.

Als ich vorschlagen in meinem Kommentar, ich bin nicht wirklich sicher, warum Sie wollen würden, dies zu tun. Für git noch in der Lage sein, alle ihre Vorteile haben, dann würden Sie git Objekte in der SQLite-Datenbank zu speichern haben. Sie würden nach wie vor alle der Low-Level-git-Tools zugreifen müssen und manipulieren sie - Sie werden nicht nur durch ihre SHA1s Blobs und Bäume aufzublicken werden und den ganzen Rest der Arbeit selbst zu tun. (Und selbst wenn aus irgendeinem Grund Sie wollten, könnten Sie das tun genauso einfach, indem Sie im git suchen Objekte Verzeichnis.)

Mein Vorschlag, dass sein würde, wenn Sie feststellen, dass es Operationen, die Sie in git ausführen wollen, die nicht unterstützt werden, machen Sie sich mit einigen der Sanitär-Befehle und herauszufinden, wie sie als Skripte zu schreiben. Git wirklich ziemlich viel kostet belichten das niedrigste Niveau der Operationen, die Sie wünschen.

P. S. Wenn Sie einen bestimmten nicht unterstützten Betrieb finden sollten Sie tun wollen, und Probleme haben, den Sanitärbereich zu finden, müssen Sie es ausführen, oder mit dem Scripting notwendig, es zu implementieren, hier posten eine Frage! Kein Grund stecken zu bleiben, nur weil Sie nicht SQL verwenden können.

Andere Tipps

Wie Jefromi schreibt, Mercurial auch ein benutzerdefiniertes Format mit hohen Kompression und schnellen Zugriff auf jede Änderung achive. Dies ist der revlog Format die eine append-only-Datenstruktur ist, die die Vorteile der nimmt Unveränderlichkeit der Changesets in Mercurial.

Allerdings ist es natürlich möglich, dieses Speicherformat mit einem anderen zu ersetzen, wenn Sie möchten. Google dies taten, als sie Mercurial auf Bigtable Code zu setzen. google.com. Eine lustige Folge von ihnen ihr eigenen Backend-Format ist, dass Sie keine Revisionsnummern in ihrem Web-Interface sehen. Im normalen Mercurial, die Revisionsnummern (die nur lokale integer Sie anstelle des vollständigen changeset Hash verwenden können) sind der Index der Differenzmengen im revlog. Wenn Change in revlogs nicht gespeichert werden, gibt es keinen natürlichen Index und damit Sie Google zeigt keine Revisionsnummern.

Es ist möglich, mit libgit2 Backends: https://github.com/libgit2/libgit2-backends/blob /master/sqlite/sqlite.c

Ich habe keine Messung durchgeführt, aber die Leistung sollte ein wenig leiden. Allerdings ist es auch bequemes (einzelne Datei für die gesamte Repo-Geschichte, klassische SQL-Abfrage language..etc ..)

Beim Reden für Git, kann man nicht anders Backend mit den offiziellen Binärdateien verwenden. Allerdings erlaubt das libgit2 Projekt, das Sie verschiedene Backends zu verwenden, um die Datenbank zu speichern. Allerdings werden Sie alle die Binärdateien bauen müssen Sie für die Begehung nutzen möchten, Verschmelzung, Schieben, Ziehen, Rebasing usw. Außerdem werden Sie nicht in der Lage sein, Ihr Repository mit den offiziellen Binärdateien zu ändern. Sie werden es zu einer Standard-Repo zu schieben haben zuerst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top