Git GUI指的是“松散对象”?


219

当打开Git GUI时,出现一条弹出消息,提示您loose objects。我做到了git gc,这删除了消息。

是什么loose objects,如何防止这种情况再次发生?


当询问是否应立即打包松散对象时,只需在弹出消息中单击“是”Git GUI将为git gc您运行,并带有一个不错的GUI进度条(尽管大多数情况下显示为卡住)。
ADTC 2014年

Answers:


144

SHA表示为810cae53e0f622d6804f063c04a83dbc3a11b7ca的对象(斑点,树和提交)将存储在

.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca

(前两个字符分开以提高文件系统的性能,因为现在并非所有对象都存储在同一目录中)

如上所述存储的对象称为“松散对象”。

在开始回购时,大多数情况下都是松散的物品。随着数量的增加,它变得效率低下,并将它们存储在打包文件中。这样的对象称为打包对象。

 git gc

是您运行打包对象的操作(通常,不需要的松散对象也将被删除几周,并且--prune=<date>您可以选择强制删除不再需要的松散对象。就像您修改提交时一样。旧的提交对象不是需要更长的时间。)


3
--prune选项默认情况下处于启用状态,并且由于它git gc是由常用用法(例如commit)自动触发的,因此您通常不必为此担心。我不使用git gui,也无法在源代码中确切找到它的触发位置,但是它要么执行自己的检查,要么仅拦截gc被调用命令触发的触发。当然,不必担心,仅由正常使用引起。
卡斯卡贝尔2011年

21
包装散乱的物品有什么不利条件吗?如果没有,为什么Git不自动执行呢?
路易·瑞斯

13
我不认为它是自动发生的。我经常提交,但是提到的“ git gui”有50,000个松散的对象(并且一直想知道git为什么这么糟糕,这么大的项目,在大约4年的时间内没有手动gc)
凯文

1
@Kevin git gc手动运行后,大型项目的性能是否有所提高?我认为应该有所改善,因为松散的物体效率低下,而50,000个是非常大的数目。我还发现打包也大大减少了.git文件夹使用的空间。
ADTC

3
@LouisRhys,“将对象写入磁盘时,它通常采用松散格式,因为这种格式访问起来较便宜。但是,最终,您将需要通过打包对象来节省空间” –来自Git Book链接在下面的答案
克里斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.