質問

私が好きなこと 化石 普通の古いsqliteを使用して変更セット、ファイルなどを保存します。コマンドラインツールを使用してリポジトリをクエリすることができますが、サポートされていないものが必要な場合は、SQLクエリの作成にフォールバックできます。

MercurialとGitはより成熟しており、ライブラリが増え、勢いが増えていますが、独自のリポジトリ形式を使用しています。リポジトリバックエンドとしてSQLiteを使用することが可能かどうか疑問に思います。 (MercurialまたはGit Repoを直接照会するツールがあることは知っていますが、SQLは簡単に思えます。)

役に立ちましたか?

解決

GITを使用すると、リポジトリ形式は、すべてが機能する方法のかなり基本的な部分です。あなたはそれを変えるために多くの仕事をしなければなりません。

私はMercurialの情報源を読んでいませんが、状況はそれほど変わらないと思います。

私のコメントで提案したように、なぜあなたがこれをやりたいのか本当にわかりません。 GITがまだすべての利点を持つことができるようにするには、SQLiteデータベースにGitオブジェクトを保存する必要があります。それらにアクセスして操作するために、まだすべての低レベルのGitツールが必要です - あなたは彼らのSHA1で塊や木を見て、自分で残りのすべての仕事をするだけではありません。 (そして、何らかの理由であなたが望んでいたとしても、Gitオブジェクトディレクトリを見ることでそれを簡単に行うことができます。)

私の提案は、サポートされていないgitで実行したい操作があることに気付いた場合、配管コマンドのいくつかに慣れ、スクリプトとしてそれらを書く方法を理解することです。 Gitは、実際にあなたが望む可能性のある最も低いレベルの操作を明らかにしています。

PSあなたがしたい特定のサポートされていない操作を見つけ、それを実行するために必要な配管を見つけるのに苦労している場合、またはそれを実装するために必要なスクリプトで、ここに質問を投稿してください! SQLを使用できないからといって、立ち往生する理由はありません。

他のヒント

Jefromiが書いているように、Mercurialはカスタム形式を使用して、高い圧縮と任意のリビジョンへの迅速なアクセスを達成しています。これは Revlog形式 これは、水銀の変更セットの不変性を活用する付録のみのデータ構造です。

ただし、もちろん、必要に応じてこのストレージ形式を別のストレージ形式に置き換えることは可能です。 Googleは、MercurialをBigtableに置いたときにこれを行いました code.google.com用。独自のバックエンド形式を使用していることの面白い結果の1つは、Webインターフェイスに改訂番号が表示されないことです。通常の水銀では、リビジョン数(完全な変更セットハッシュの代わりに使用できるローカルのみの整数)は、Revlogの変更セットのインデックスです。変更セットがRevlogsに保存されていない場合、Natural Indexはありません。したがって、Googleはリビジョン番号が表示されません。

libgit2バックエンドで可能です:https://github.com/libgit2/libgit2-backends/blob/master/sqlite/sqlite.c

測定はしていませんが、パフォーマンスは少し苦しむはずです。ただし、より便利です(レポ履歴全体の単一ファイル、クラシックSQLクエリ言語..etc ..)

Gitについて話すと、公式のバイナリで異なるバックエンドを使用することはできません。ただし、LIBGIT2プロジェクトでは、さまざまなバックエンドを使用してデータベースを保存できます。ただし、コミット、マージ、プッシュ、引っ張り、リベッシングなどに使用するすべてのバイナリを構築する必要があります。また、公式のバイナリでリポジトリを変更することもできません。最初に標準のレポにプッシュする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top