Git警告:“禁用位图写入”
执行git push
成功向远程发送更改后返回以下消息。Git警告:“禁用位图写入”
error: The last gc run reported the following. Please correct the root cause
and remove gc.log.
Automatic cleanup will not be performed until the file is removed.
warning: disabling bitmap writing, as some objects are not being packed
通常当垃圾收集器返回警告一个git prune
修复它。这两个和git gc --aggressive
尚未解决此问题,并且不返回任何错误或警告。运行find . -iname gc.log
不会返回任何内容,因此我无法追踪gc.log文件以获取更多信息。
这是一个非常大的回购托管在一个专用的Bitbucket服务器上。
什么“禁用位图书写,因为一些对象没有被打包”意味着什么,我们如何解决它? gc.log文件在哪里?
的gc.log
文件被git gc --auto
当它要报告的东西(什么,在所有的,在于git gc --auto
在背景中剥离出来,并有问题无处报告,其他比这个日志文件)留下。
至于警告本身:位图用于加速对象遍历(即优化服务器性能)。这只适用于所有对象实际上都在包中的情况,这就是警告的意思。
我不清楚为什么有些物体没有被包装。如果我们不希望将该对象放入包中,则该消息来自add_object_entry
的builtin/pack-objects.c
,如函数want_object_in_pack
在相同文件中所确定的那样。这又取决于--local
以及是否存在维护先前包的.keep
文件。
Git版本2.12.2和2.13.0添加了一个hack来忽略(和删除)陈旧的gc.log
文件,因为它们的存在会禁用进一步的git gc --auto
操作。如果你的Git是新的,它会在日志过期时删除那些陈旧的文件,默认为24小时(1.day
)。请参阅the git config
documentation中的gc.logExpire
说明。
这是非常翔实的。我在2.13.3。如果我只运行'git gc',我看不到任何警告或日志文件。只有当我拉下新的变化。即使我将'gc.logExpire'明确设置为'1.day',日志文件也不会存在。 –
一个常规的(不是'--auto')'git gc'有地方可以报告,所以即使它抱怨也不会写入日志文件。诀窍是在发现它时获得非自动gc,或者非常快地捕获auto-gc故障。我怀疑还有别的对象商店或其他类似的东西,但不知道是什么。 – torek
我以前见过gc.log,位于回购的.git目录中。尽管如此,我从来没有见过位图警告。 (另外,你好马特。:) –
嘿,迈克尔!我在.git或.git/logs目录中看不到任何gc.log。即使'发现。 -iname gc.log'什么都不返回。 –
远程服务器上的gc.log? – o11c