Answers:
SHA表示为810cae53e0f622d6804f063c04a83dbc3a11b7ca的对象(斑点,树和提交)将存储在
.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca
(前两个字符分开以提高文件系统的性能,因为现在并非所有对象都存储在同一目录中)
如上所述存储的对象称为“松散对象”。
在开始回购时,大多数情况下都是松散的物品。随着数量的增加,它变得效率低下,并将它们存储在打包文件中。这样的对象称为打包对象。
git gc
是您运行打包对象的操作(通常,不需要的松散对象也将被删除几周,并且--prune=<date>您可以选择强制删除不再需要的松散对象。就像您修改提交时一样。旧的提交对象不是需要更长的时间。)
--prune选项默认情况下处于启用状态,并且由于它git gc是由常用用法(例如commit)自动触发的,因此您通常不必为此担心。我不使用git gui,也无法在源代码中确切找到它的触发位置,但是它要么执行自己的检查,要么仅拦截gc被调用命令触发的触发。当然,不必担心,仅由正常使用引起。
git gc手动运行后,大型项目的性能是否有所提高?我认为应该有所改善,因为松散的物体效率低下,而50,000个是非常大的数目。我还发现打包也大大减少了.git文件夹使用的空间。
Git书对此进行了很好的解释:https : //git-scm.com/book/en/v2/Git-Internals-Packfiles
松散的对象是更简单的格式。它只是将压缩数据存储在磁盘上的单个文件中。每个对象都写入一个单独的文件。
git gc您运行,并带有一个不错的GUI进度条(尽管大多数情况下显示为卡住)。