Git GUI引用的"松散对象"是什么?

oxo*_*oxo 208 git

当我打开Git GUI时,我收到一条引用的弹出消息loose objects.我做了,git gc并删除了该消息.

我有什么loose objects方法可以防止再次发生这种情况?

man*_*lds 136

SHA表示的对象(blob,树和提交) - 810cae53e0f622d6804f063c04a83dbc3a11b7ca将存储在

.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca
Run Code Online (Sandbox Code Playgroud)

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

如上存储的对象称为松散对象.

当你启动你的回购时,你大多数都有松散的物体.随着数量的增加,它变得效率低下并且存储在包文件中.这些对象称为打包对象.

 git gc
Run Code Online (Sandbox Code Playgroud)

是你运行以打包对象(通常是不需要和几周之后的松散对象也被删除,并且可以--prune=<date>选择强制删除不再需要的松散对象.就像修改提交时一样.旧的提交对象是否需要更久.)

  • 包装松散物体有什么缺点吗?如果没有,为什么Git不会自动执行? (20认同)
  • 我不认为它是自动发生的.我经常提交,但提到'git gui'有5万个松散的物体(并且一直想知道为什么git这么该死,大型项目超过4年没有手动gc) (13认同)
  • `--prune`选项默认启用,由于`git gc`是由常用用法自动触发的(例如`commit`),你通常不必担心这个问题.我不使用git gui,我无法确切地找到它在源中被触发的位置,但要么它自己检查,要么只是拦截被调用命令触发的`gc`.然而,这肯定不用担心,只是由正常使用引起的. (3认同)
  • @LouisRhys,"当对象被写入磁盘时,它通常是松散的格式,因为访问该格式的成本较低.但是,最终你需要通过打包对象来节省空间" - 来自Git Book链接在[以下回答](http://stackoverflow.com/a/5709910/1003959) (3认同)
  • 这是影响远程仓库的操作吗?还是只是局部优化? (3认同)

Moh*_*our 38

Git Book很好地解释了它:https: //git-scm.com/book/en/v2/Git-Internals-Packfiles

松散的对象是更简单的格式.它只是存储在磁盘上的单个文件中的压缩数据.每个对象写入一个单独的文件.