2017-08-01 93 views
1

执行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文件在哪里?

+0

我以前见过gc.log,位于回购的.git目录中。尽管如此,我从来没有见过位图警告。 (另外,你好马特。:) –

+0

嘿,迈克尔!我在.git或.git/logs目录中看不到任何gc.log。即使'发现。 -iname gc.log'什么都不返回。 –

+0

远程服务器上的gc.log? – o11c

回答

2

gc.log文件被git gc --auto当它要报告的东西(什么,在所有的,在于git gc --auto在背景中剥离出来,并有问题无处报告,其他比这个日志文件)留下。

至于警告本身:位图用于加速对象遍历(即优化服务器性能)。这只适用于所有对象实际上都在包中的情况,这就是警告的意思。

我不清楚为什么有些物体没有被包装。如果我们不希望将该对象放入包中,则该消息来自add_object_entrybuiltin/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说明。

+0

这是非常翔实的。我在2.13.3。如果我只运行'git gc',我看不到任何警告或日志文件。只有当我拉下新的变化。即使我将'gc.logExpire'明确设置为'1.day',日志文件也不会存在。 –

+1

一个常规的(不是'--auto')'git gc'有地方可以报告,所以即使它抱怨也不会写入日志文件。诀窍是在发现它时获得非自动gc,或者非常快地捕获auto-gc故障。我怀疑还有别的对象商店或其他类似的东西,但不知道是什么。 – torek