GitHub 每个对象只存储一次吗?
Does GitHub store each object just once?
我正在做一个关于从 GitHub 存储大量存储库的项目。许多存储库共享许多对象。所以我想了解 GitHub 是否只将每个对象存储一次以节省存储空间,以及如何执行此操作(如果不是秘密的话)。
我还没有找到任何令人满意的答案,只是一些预测 GitHub 已经做到了。
GitHub 没有这样做。 GitHub 单独存储每个 "repository network",其中存储库网络是:
- 原始存储库
- 该存储库的复刻
每个 "repository network" 可以使用 Git 的 "alternates" 机制在它们之间共享 object。这允许 Git 考虑其他 object 数据库位置,而不仅仅是存储库中的正常存储。
当您在 GitHub 上创建存储库时,您会在磁盘上创建一个单一的裸存储库,并使用正常的 on-disk object 数据库进行备份。当您从该存储库创建复刻时,GitHub 将:
- 为存储库网络创建一个新的 "alternates" 区域。
- 将存储库的 object 移至备用区域。
- 设置原始存储库以了解新的备用区域
- 设置新分支以了解新的备用区域。
发生这种情况时,存储库网络将在它们之间共享 object。这意味着 object 在原始存储库和已分叉的存储库之间共享。
但这是共享 object 存储空间的限制。没有每个人都可以共享的 object 大数据库(出于可扩展性和安全性原因也不应该有)。
(注意:尽管我在 GitHub 的 Git 基础设施团队工作,但此信息不是机密信息。)
来源
这两个在 Git Merge 会议上的演讲讨论了 GitHub 的 git 存储库存储:
- 在 GitHub 上的缩放,帕特里克·雷诺兹 (Patrick Reynolds) 在 Git Merge 2016 年的演讲。
- 在 GitHub 上托管的十大最差存储库,Carlos Martín Nieto 在 Git Merge 2017 年的演讲。
- Counting Objects,Vicent Martí 的文章。
我正在做一个关于从 GitHub 存储大量存储库的项目。许多存储库共享许多对象。所以我想了解 GitHub 是否只将每个对象存储一次以节省存储空间,以及如何执行此操作(如果不是秘密的话)。
我还没有找到任何令人满意的答案,只是一些预测 GitHub 已经做到了。
GitHub 没有这样做。 GitHub 单独存储每个 "repository network",其中存储库网络是:
- 原始存储库
- 该存储库的复刻
每个 "repository network" 可以使用 Git 的 "alternates" 机制在它们之间共享 object。这允许 Git 考虑其他 object 数据库位置,而不仅仅是存储库中的正常存储。
当您在 GitHub 上创建存储库时,您会在磁盘上创建一个单一的裸存储库,并使用正常的 on-disk object 数据库进行备份。当您从该存储库创建复刻时,GitHub 将:
- 为存储库网络创建一个新的 "alternates" 区域。
- 将存储库的 object 移至备用区域。
- 设置原始存储库以了解新的备用区域
- 设置新分支以了解新的备用区域。
发生这种情况时,存储库网络将在它们之间共享 object。这意味着 object 在原始存储库和已分叉的存储库之间共享。
但这是共享 object 存储空间的限制。没有每个人都可以共享的 object 大数据库(出于可扩展性和安全性原因也不应该有)。
(注意:尽管我在 GitHub 的 Git 基础设施团队工作,但此信息不是机密信息。)
来源
这两个在 Git Merge 会议上的演讲讨论了 GitHub 的 git 存储库存储:
- 在 GitHub 上的缩放,帕特里克·雷诺兹 (Patrick Reynolds) 在 Git Merge 2016 年的演讲。
- 在 GitHub 上托管的十大最差存储库,Carlos Martín Nieto 在 Git Merge 2017 年的演讲。
- Counting Objects,Vicent Martí 的文章。