【问题标题】:What's the purpose of libgit2-backend?libgit2-backend 的目的是什么?
【发布时间】:2019-09-24 19:43:00
【问题描述】:

我正在尝试建立一个支持 git 版本控制的网站。我正在使用 libgit2 作为后端。但我认为文件系统不是那么容易扩展和保证数据完整性。我注意到 libgit2 具有自定义后端 (https://github.com/libgit2/libgit2-backends) 支持,我可以在其中使用数据库进行一些存储。

最初我希望通过将与 git 相关的所有内容保存到数据库中来完全摆脱文件系统。但是在我尝试了 sqlite 后端之后,似乎 libgit2 仍然需要在我的文件系统上生成一个 .git 文件夹?当我使用数据库作为后端时,我可以删除 .git 文件夹吗?

【问题讨论】:

    标签: libgit2


    【解决方案1】:

    使用 libgit2 拥有一个工作的“内存中”存储库有一些“限制”,即使支持“某些”内存中。正如您所发现的,自定义对象数据库 (.git/objects/) 和 refdb (.git/refs/) 都有 API 端点,并且配置子系统可以在内存中工作。但是对于可以在.git/ 中进行的所有其他事情,情况并非如此,因为在回购级别没有自定义点——恕我直言,当你完全没有 fs 时,这不是我们在谈论的 git——工作并没有真正朝着这个方向发展。

    【讨论】:

    • 非常感谢!你认为我应该停止在这个方向上花费时间并专注于扩展文件系统吗?你对 github/gitlab 如何处理这个有见解吗?他们是否依赖像 glusterfs 这样的云文件系统?
    • 我希望拥有的是 libgit2 中 fs 的抽象(而不是一些仅允许我在内存中执行部分操作的后端)。 libgit2 仍然可以发挥相同的作用,与“fs”交互。我可以实现我的 in mem fs api,在 git 操作结束时,我得到一个代表整个 repo 的 blob。我可以将 blob 保存到数据库中。
    • 我不知道 GitHub 对 libgit2 做了什么,但我很惊讶他们会携带很多上游代码,所以它更可能类似于我所描述的:一个自定义 refdb + odb 支持一个数据库,以及正常的文件系统到.git 的其余部分,很可能是因为他们仍然需要git 来执行某些任务(例如,libgit2 不执行“git-gc”)。
    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 2012-06-19
    • 2016-04-24
    • 2016-09-21
    • 2011-03-05
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多