我喜歡fossil的是它使用普通的舊sqlite來存儲變更集,文件等我可以使用它的命令行工具來查詢存儲庫,但如果我想要的東西不支持它,我可以回退寫一個SQL查詢。關於mercurial或git的關係數據庫後端
Mercurial和git更成熟,它們有更多的庫,更多的動力,但他們使用自己的存儲庫格式。我想知道是否可以將sqlite作爲其存儲庫後端。 (我知道有工具可以直接查詢mercurial或git倉庫,但sql似乎更容易。)
我喜歡fossil的是它使用普通的舊sqlite來存儲變更集,文件等我可以使用它的命令行工具來查詢存儲庫,但如果我想要的東西不支持它,我可以回退寫一個SQL查詢。關於mercurial或git的關係數據庫後端
Mercurial和git更成熟,它們有更多的庫,更多的動力,但他們使用自己的存儲庫格式。我想知道是否可以將sqlite作爲其存儲庫後端。 (我知道有工具可以直接查詢mercurial或git倉庫,但sql似乎更容易。)
使用git,倉庫格式是一切工作方式的一個非常基本的部分。你必須做很多工作才能改變這種狀況。
我還沒有讀過任何汞的來源,但我想象的情況並沒有太大的不同。
正如我在我的評論中所建議的那樣,我不確定你爲什麼要這樣做。爲了讓git仍然具備所有優點,你必須將git對象存儲在你的sqlite數據庫中。你仍然需要所有低級別的git工具來訪問和操作它們 - 你不會只是通過他們的SHA1查找斑點和樹木,而是自己完成所有其他工作。 (即使出於某種原因,你也可以通過查看git對象目錄來簡單地做到這一點)。
我的建議是,如果你發現有你想在git中執行的操作那些不受支持的,你熟悉一些管道命令並找出如何將它們編寫爲腳本。 Git確實確實暴露了您可能需要的最低級別的操作。
P.S.如果您應該找到您想要執行的特定不受支持的操作,並且無法找到需要執行的操作或執行腳本所需的腳本,請在此處發帖提問!沒有理由因爲無法使用sql而陷入困境。
正如Jefromi寫道,Mercurial也使用自定義格式來實現對任何修訂的高壓縮和快速訪問。這是revlog format,它是一個僅追加數據結構,它利用了Mercurial中變更集的不可變性。
但是,如果您喜歡,當然可以用另一種替換這種存儲格式。適用於code.google.com的Google did this when they put Mercurial on Bigtable。他們使用自己的後端格式的一個有趣的結果是,您的Web界面中沒有看到任何修訂號。在普通的Mercurial中,修訂版本號(您可以使用的僅限本地的整數代替完整的變更集散列)是revlog中變更集的索引。當更改集沒有存儲在revlogs中時,沒有自然的索引,因此Google不會向您顯示修訂版本號。
有可能與libgit2後端: https://github.com/libgit2/libgit2-backends/blob/master/sqlite/sqlite.c
我沒有做任何測量,但性能應該受些影響。然而,它也更方便(單個文件的整個回購歷史記錄,經典SQL查詢語言等..)
說到Git,你不能使用官方二進制文件不同的後端。但是,libgit2項目允許您使用不同的後端來存儲數據庫。但是,您必須構建您希望用於提交,合併,推送,拉取,重新綁定等的所有二進制文件。此外,您將無法使用官方二進制文件修改您的存儲庫。你必須先將它推到標準回購。
這不是一種以有效的方式存儲和查詢數據的git嗎? – Cascabel 2010-08-19 13:01:25
git使用領域特定的知識(它的對象是不可變的,它們都存在於樹結構中)比存儲git存儲的東西時的一般RDB更好。 (無論如何,SQL在表達樹關係時很糟糕。) – masonk 2010-08-19 14:14:14