1

我在 Github 上有一个大型项目的分支,我想从其他人的分支中提取更改,并推荐他们可以提取我的更改的方法。

为我想按照这个问题中的建议从中提取代码的用户添加新的命名遥控器听起来是一个很好的解决方案,但是这样做会显着影响我的本地存储库的大小吗?

(我要继续尝试,但我找不到任何有关此的信息,所以我想我会问后代。)

4

1 回答 1

5

(作为术语说明,这些是其他“远程”,而不是“起源”;“起源”只是为您克隆的存储库设置的远程的默认名称。)

如果您添加了一个远程,它是原始大型存储库的一个分支(并从那里获取),通常会使用很少的额外空间。这是因为 git 聪明的存储模型。每个文件(“blob”)由散列标识,每个目录(“树”)由 blob、树和其中包含的其他对象的散列的散列标识,提交由包含树的散列数据标识在源代码的顶层。因此,直到出现分叉的所有历史都将由具有相同 ID 的提交表示,因此没有额外的存储空间用于这些。在分歧之后,只有额外的存储空间用于已更改的文件 - 如果存储库中有大 blob,除非它们的内容发生更改,否则它们仍将具有相同的哈希,所以只会存储一次。(即便如此,git 在打包对象时会进行二进制增量压缩,因此将小更改存储到大文件应该仍然非常有效。)

如果分叉添加了原始存储库中不存在的大型新文件,那么这当然会显着增加使用的空间量。

于 2012-10-22T09:55:49.947 回答