我喜欢什么 化石 是它使用普通的旧sqlite存储更改,文件等。我可以使用其命令行工具来查询存储库,但是如果我想要不支持的东西,我可能会退缩以编写SQL查询。

Mercurial和Git更加成熟,它们具有更多的图书馆,更多的势头,但它们使用了自己的存储库格式。我想知道是否可以将SQLite作为其存储库后端。 (我知道有一些工具可以直接查询Mercurial或Git Repo,但SQL似乎更容易。)

有帮助吗?

解决方案

使用GIT,存储库格式是一切工作方式的基本组成部分。您必须做很多工作才能改变这一点。

我没有读过Mercurial的任何来源,但我想情况并没有太大不同。

正如我在评论中提出的那样,我不确定为什么要这样做。为了使Git仍然能够拥有所有优势,您必须将GIT对象存储在SQLITE数据库中。您仍然需要所有的低级GIT工具来访问和操纵它们 - 您不会仅仅通过SHA1来查找斑点和树木,并自己完成所有其余的工作。 (即使出于某种原因,您也可以通过在git对象目录中查看同样轻松地做到这一点。)

我的建议是,如果您发现要在GIT中执行的操作不受支持,那么您就会熟悉一些管道命令,并弄清楚如何将它们写成脚本。 Git确实确实揭示了您想要的最低操作水平。

PS,如果您应该找到要执行的特定不支持的操作,并且难以找到需要执行它的管道,或者在实施它所需的脚本上,请在此处发布一个问题!没有理由因为您无法使用SQL而被卡住。

其他提示

正如Jefromi所写,Mercurial还使用自定义格式来实现高压和快速访问任何修订。这是 revlog格式 这是一种仅附加数据结构,它利用了Mercurial中更改的不变性。

但是,如果您愿意,当然可以用另一种替换此存储格式。 Google将Mercurial放在Begtable上时做到了这一点 对于Code.google.com。他们使用自己的后端格式的一个有趣的后果是,您在网络界面中看不到任何修订号。在正常的mercurial中,修订号(您可以使用局部整数而不是完整的更改集哈希)是Revlog中更改集的索引。当不存储更改集中时,没有天然索引,因此Google不会显示您的修订号。

Libgit2后端可能有可能:https://github.com/libgit2/libgit2-backends/blob/master/sqlite/sqlite.c

我没有进行任何测量,但性能应该有些痛苦。但是,它也更方便(整个回购历史记录的单个文件,经典SQL查询语言..ETC ..)

对于git来说,您不能与官方二进制文件一起使用不同的后端。但是,LIBGIT2项目允许您使用不同的后端存储数据库。但是,您必须构建所有想要使用的二进制文件,以进行合作,合并,推动,拉动,重新挑选等。另外,您将无法使用官方二进制文件来修改存储库。您必须先将其推到标准回购。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top