Git将哪个数据库用于元数据,我如何访问它?

时间:2018-08-20 12:21:10

标签: git

git log是一个功能强大的Git命令,它允许对很多事情进行查询:文件作者,提交描述,提交日期等。Git本身says表示元数据存储在某些数据库中。我在任何地方都找不到哪种数据库。

所以我想知道这个数据库是什么?是关系型的,也许我可以以某种方式使用SQL来直接从数据库执行查询,而不是使用git log

编辑:此问题与How does git store files?不同,因为该问题主要询问Git如何存储提交的文件,而我的问题询问元数据存储(元数据!=数据)。

2 个答案:

答案 0 :(得分:2)

在该描述中,Git从字面意义上将其内部状态描述为“数据库”。来自Wikipedia

  

数据库是有组织的数据集合,可以电子方式存储和访问。

它不是关系数据库,或者您可以使用SQL之类的查询语言轻松查询它。

但是,您可以通过编程方式访问数据库。例如,如果您使用的是.NET,则使用LibGit2Sharp和Linq:

using (var repo = new Repository(@"path\to\repo.git"))
{
    // Rev walking
    var commits = repo.Commits
                      .StartingAt("sha")
                      .Where(c => c.Author.Email.Contains("@example.com"))
                      .ToList();
}

答案 1 :(得分:2)

git glossary(在https://git-scm.com/docs/gitglossary

  

对象数据库-存储一组“对象”,并通过其对象名称标识单个对象。这些对象通常位于$ GIT_DIR / objects /中。

数据库是通常存储在.git/objects/下的文件的集合(或者,对于裸仓库,仅存储在objects/下。)

这不是RDBMS。它没有通用的查询语言,而是与各种git工具一起使用(反之亦然),可以快速访问git所需的信息。