0

在 Github 中,当我想在我不拥有的存储库上进行编辑时,我 fork 它,这意味着我将所有存储库文件/文件夹复制到我自己的存储空间,然后在分支中添加编辑,最后我提出拉取请求在原始存储库中供所有者合并

如果每次编辑都会复制整个存储库,这将是巨大的存储浪费和冗余数据的指数增长。

这是正确的,还是我错过了一个大图?

考虑是否不仅仅是文本文件,是否是每个人都可以使用 git 贡献的媒体文件

4

1 回答 1

3

事实上,如果一个 fork 是存储库的完整副本,那么这将是非常低效的。 GitHub 的工程博客在一篇关于加速网络操作的博文中指出了这一点:

...如果每个 [fork] 都是它自己的存储库副本,那将意味着大量的冗余磁盘空间,需要的文件服务器比我们基础设施中的文件服务器多几倍。

相反,GitHub 分叉使用git 备用存储,它允许存储库将其存储库对象存储指向另一个位置。

这允许所有分叉指向单个磁盘位置,从而最大限度地减少重复并允许跨分叉进行优化。文继续:

这就是为什么我们决定使用 Git 的一项功能,称为 Alternates。当您在 GitHub 上创建存储库时,我们会创建它的浅表副本。这个副本没有自己的对象,但它可以访问备用的所有对象,一个我们称为 network.git 的根存储库,其中包含网络中所有分支的对象。当您推送到您的存储库时,最终我们会将您推送到 network.git 根目录的对象移至,因此它们已经可用,以防您决定针对原始存储库创建拉取请求。

由于网络中的所有存储库共享同一个对象池,我们可以将所有对象保存在单个包文件中,从而通过不在分叉之间存储所有重复的对象来最小化存储库网络的磁盘大小。

于 2016-05-02T13:55:25.913 回答