Mar*_*ler 13
正如Jefromi所写,Mercurial也使用自定义格式来实现高压缩和快速访问任何修订.这是revlog格式,它是一种仅附加数据结构,它利用了Mercurial中变更集的不变性.
但是,如果您愿意,当然可以将此存储格式替换为另一种存储格式.当他们将Mercurial放在bigtable上以代码访问code.google.com 时谷歌就这样做了.他们使用自己的后端格式的一个有趣结果是,他们的Web界面中没有看到任何修订号.在正常的Mercurial中,修订号(您可以使用的仅本地整数而不是完整的变更集哈希)是revlog中变更集的索引.如果变更集未存储在revlogs中,则没有自然索引,因此Google会向您显示修订号.
Cas*_*bel 12
使用git,存储库格式是一切工作方式的一个非常基本的部分.你需要做很多工作来改变它.
我没有读过任何mercurial的来源,但我想情况并没有太大的不同.
正如我在评论中所建议的那样,我不确定你为什么要这样做.为了让git仍然能够拥有它的所有优点,你必须在你的sqlite数据库中存储git对象.您仍然需要所有低级git工具来访问和操作它们 - 您不会只是通过SHA1查找blob和树并自己完成所有其他工作.(即使出于某种原因你想要,你也可以通过查看git对象目录来轻松实现.)
我的建议是,如果你发现你想在git中执行不受支持的操作,你就要熟悉一些管道命令,并弄清楚如何将它们编写为脚本.Git确实暴露了你想要的最低级别的操作.
PS如果您要找到您想要执行的特定不受支持的操作,并且无法找到您需要执行它的管道,或者使用实现它所需的脚本,请在此处发布问题!没有理由因为你不能使用sql而卡住.
使用libgit2后端是可能的:https: //github.com/libgit2/libgit2-backends/blob/master/sqlite/sqlite.c
我没有做任何测量,但性能应该受到一点影响.但是,它也更方便(整个仓库历史的单个文件,经典的SQL查询语言..等等..)
归档时间: |
|
查看次数: |
3143 次 |
最近记录: |