Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql mercurial或git的关系数据库后端_Sql_Database_Git_Mercurial_Fossil - Fatal编程技术网

Sql mercurial或git的关系数据库后端

Sql mercurial或git的关系数据库后端,sql,database,git,mercurial,fossil,Sql,Database,Git,Mercurial,Fossil,我喜欢的是它使用普通的sqlite来存储变更集、文件等。我可以使用它的命令行工具来查询存储库,但是如果我想要它不支持的东西,我可以回过头来编写sql查询 Mercurial和git更成熟,它们有更多的库,更有动力,但它们使用自己的存储库格式。我想知道是否有可能将sqlite作为他们的存储库后端。(我知道有一些工具可以直接查询mercurial或git回购,但sql似乎更容易。)对于git,存储库格式是一切工作方式中非常基本的一部分。要改变这一点,你需要做很多工作 我没有读过mercurial的任

我喜欢的是它使用普通的sqlite来存储变更集、文件等。我可以使用它的命令行工具来查询存储库,但是如果我想要它不支持的东西,我可以回过头来编写sql查询


Mercurial和git更成熟,它们有更多的库,更有动力,但它们使用自己的存储库格式。我想知道是否有可能将sqlite作为他们的存储库后端。(我知道有一些工具可以直接查询mercurial或git回购,但sql似乎更容易。)

对于git,存储库格式是一切工作方式中非常基本的一部分。要改变这一点,你需要做很多工作

我没有读过mercurial的任何资料,但我想情况并没有太大的不同

正如我在评论中所建议的,我不确定你为什么要这么做。为了使git仍然能够拥有其所有优势,您必须将git对象存储在sqlite数据库中。您仍然需要所有的低级git工具来访问和操作它们——您不会只是靠它们的sha1查找blob和tree,然后自己完成其余的工作。(即使出于某种原因,您想这样做,也可以通过查看git objects目录轻松做到。)

我的建议是,如果您发现想要在git中执行的操作不受支持,那么您应该熟悉一些管道命令,并了解如何将它们作为脚本编写。Git确实公开了您可能需要的最低级别的操作


注意:如果您发现您想要执行的特定不受支持的操作,并且在查找执行该操作所需的管道或执行该操作所需的脚本时遇到困难,请在此处发布问题!没有理由因为不能使用sql而陷入困境。

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


但是,如果您愿意,当然可以用另一种存储格式替换此存储格式。对于code.google.com。他们使用自己的后端格式的一个有趣结果是,在他们的web界面中看不到任何修订号。在普通Mercurial中,修订号(您可以使用的唯一本地整数,而不是完整的变更集哈希)是revlog中变更集的索引。当变更集未存储在Revlog中时,就没有自然索引,因此Google不会向您显示修订号。

使用libgit2后端是可能的:


我还没有做任何测量,但性能应该会受到一些影响。但是,它也更方便(整个回购历史记录都是一个文件,经典的SQL查询语言等等)

对于Git来说,您不能将不同的后端与官方二进制文件一起使用。但是,libgit2项目允许您使用不同的后端来存储数据库。但是,您必须构建所有您希望用于提交、合并、推送、拉取、重定基址等的二进制文件。此外,您将无法使用官方二进制文件修改存储库。您必须首先将其推送到标准的repo中。

git以一种高效的方式存储和查询其数据不是很重要吗?git使用特定于领域的知识(其对象是不可变的,并且它们都存在于树结构中)来比一般的RDB更好地存储git存储的内容。(无论如何,SQL在表达树关系方面很差劲。)有一件事Git不能有效地做,因为它使用键值存储:它可以有效地找到提交的所有父项,但不能找到所有子项,因为所有关系都表示为“父指针”,要做到这一点,需要使用O(N)内存来构建反向图。因此,github也不允许您查看给定提交的所有子项,而且我还不知道有哪种git工具可以这样做。相比之下,在化石中找到一个commit的所有子项是微不足道的