2017-08-01 10 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が見られました。これは、repoの.gitディレクトリにあります。私はビットマップの警告を見たことがない。 (また、マット。:) –

+0

ねえ、マイケル! .gitまたは.git/logsディレクトリにgc.logが見つかりません。 「見つけよう。 -iname gc.log'は何も返しません。 –

+0

リモートサーバー上のgc.logですか? – o11c

答えて

2

それは(このログファイル以外のすべてでは何も、問題はgit gc --autoがバックグラウンドで分社し、に報告するどこにも持っていなかったということで、)何かを報告したい場合gc.logファイルはgit gc --autoから取り残されています。

警告自体は、オブジェクトのトラバーサルを高速化する(つまり、サーバーのパフォーマンスを最適化する)ためにビットマップが使用されます。これは、すべてのオブジェクトが実際にパックに入っている場合にのみ機能します。これはその警告の意味です。

一部のオブジェクトがパックされていない理由はわかりません。同じファイル内の関数want_object_in_packによって決定されるように、このオブジェクトをパックに入れたくない場合、メッセージはadd_object_entryからbuiltin/pack-objects.cになります。これは、--localと、以前のパックを維持するファイルが.keepあるかどうかによって決まります。

ギターバージョン2.12.2と2.13.0では、git gc --autoの操作が無効になっているため、古いgc.logファイルを無視(および削除)するためのハックが追加されました。 Gitがこの新しいものであれば、ログが期限切れになると古いファイルが削除されます。デフォルトは24時間(1.day)です。 the git config documentationgc.logExpireの説明を参照してください。

+0

これは非常に参考になります。私は2.13.3です。 'git gc'だけを実行すると、警告またはログファイルが表示されません。私は新しい変更をプルダウンするときだけです。 'gc.logExpire'を明示的に' '1.day'に設定しても、ログファイルは存在しません。 –

+1

普通の( '--auto'ではなく)' git gc'はどこかに報告するので、不平を言ってもログファイルを書きません。そのトリックは、あなたがそれを見つけることができるときに非auto gcを発生させるか、またはauto-gcの失敗を非常に素早くキャッ​​チすることです。別のオブジェクトストアやそのようなもので何かが起こっていると思われますが、何がわからないのですか。 – torek

関連する問題