git count对象警告:没有相应的。包:

git count对象警告:没有相应的。包:,git,Git,来自git count objects-v的此警告是什么意思?谷歌只给了我git本身的来源 warning: no corresponding .pack: .git/objects/pack/pack-fdd1d6e3161128d4fe4b38849cf0.idx ... (many lines of the same warning) count: 4715 size: 37151 in-pack: 426048 packs: 22 size-pack: 656437 prune-pac

来自git count objects-v的此警告是什么意思?谷歌只给了我git本身的来源

warning: no corresponding .pack: .git/objects/pack/pack-fdd1d6e3161128d4fe4b38849cf0.idx
...  (many lines of the same warning)
count: 4715
size: 37151
in-pack: 426048
packs: 22
size-pack: 656437
prune-packable: 137
garbage: 92
size-garbage: 5893
这是否意味着这些对象可以被压缩,正如

我如何判断我是应该重新打包还是用gc访问我的存储库(显然,重新打包和gc之间有区别)?它到底是必要的还是有害的


为什么git有这么多行话

这可能是因为包文件太大

在Git2.30(2021年第1季度)之前,代码没有准备好处理大于4GB的pack
.idx
文件

参见,,(2020年11月13日)by.
(于2020年11月25日合并)

:使用
size\u t
存储数据包
.idx
字节偏移量 签字人:杰夫·金

我们有时将偏移量作为“无符号长”存储到pack
.idx
文件中,但pack
.idx
文件的mmap'd大小可能超过4GB

这在像Linux这样的LP64系统上就足够了,但在像Windows这样的LLP64系统上就太小了,因为“unsigned long”仍然只有32位

让我们使用
size\t,
这是一种更好的内存缓冲区偏移类型

影响

:正确计算大于4GB的idx文件的校验和 签字人:杰夫·金

在检查
.idx
文件的尾随校验和散列时,我们将整个缓冲区(减去尾随散列)传递到
对\u hash\u algo->update\u fn()的单个调用中
但我们将其转换为“unsigned int”。
这来自于(“当我们真正指的是文件偏移量时,使用
off\u t
”,2007-03-06,Git v1.5.1-rc1--)。该提交开始将
index\u size
变量存储为
off\t,
,但从那时起,我们的mozilla-sha1实现被限制为更小的大小。
大概cast是一种说明我们希望
.idx
文件很小的方式,因此我们不需要循环(就像我们对任意大的.pack文件所做的那样)。尽管作为旁白,它仍然是错误的,因为mozilla函数实际上使用了带符号的int

现在,我们的散列更新函数被定义为采用
size\t,
,因此我们可以直接传递整个缓冲区。演员阵容实际上导致了一个错误的截断

不过,在这里,让我们首先去掉令人困惑的
off\t
变量。我们不是从文件系统中获取大小,而是从
p->index\u size,
中获取大小,这是一个
size\u t
。事实上,我们可以通过删除本地变量replication
p->index\u size,
来提高代码的可读性,取而代之的是存储实际索引数据的大小,减去尾随散列 (复制到剪贴板)


您的系统上是否存在文件
.git/objects/pack/pack-fdd1d6e311128d4fe4b38849cf0.pack
?该消息听起来像是您有一个
*.idx
文件,但没有匹配的
*.pack
文件。是的,pack文件存在,这一警告令人惊讶。“为什么git有这么多行话”-因为Torvalds