GitHub只存储一次对象吗?

时间:2018-01-21 11:23:37

标签: github storage

我正在做一个关于从GitHub存储大量存储库的项目。许多存储库共享许多对象。所以我想了解GitHub是否只存储一次对象以节省存储空间,以及如何执行此操作(如果这不是秘密)。

我没有找到任何令人满意的答案,只是GitHub做了一些预测。

1 个答案:

答案 0 :(得分:2)

GitHub 完成此操作。 GitHub单独存储每个“存储库网络”,其中存储库网络是:

  • 原始存储库
  • 该存储库的分支

每个“存储库网络”都可以使用Git的“替代”机制在它们之间共享对象。这允许Git考虑其他对象数据库位置,而不仅仅是存储库中的正常存储。

在GitHub上创建存储库时,您将在磁盘上创建一个裸存储库,并使用正常的磁盘上对象数据库对其进行备份。当您从该存储库创建一个fork时,GitHub将:

  1. 为存储库网络创建一个新的“替代”区域。
  2. 将存储库的对象移动到替代区域。
  3. 设置原始存储库以了解新的替代区域
  4. 设置新分叉以了解新的替代区域。
  5. 发生这种情况时,存储库网络将在它们之间共享对象。这意味着对象在原始存储库和已分叉的存储库之间共享。

    但这是共享对象存储的限制。每个人都无法共享大型对象数据库(也不应该出于可扩展性和安全性原因)。

    (注意:虽然我在GitHub上的Git基础设施团队工作,但这些信息并不保密。)

    <强>来源

    Git Merge会议上的这两场会谈讨论了GitHub的git存储库存储: