web-dev-qa-db-ja.com

チーム全体が「到達できないルーズオブジェクトが多すぎます」というメッセージを受け取ります

少し前に、SVNからGitに切り替えました。

数日前、私はすべてのチームがプッシュしたときにこれらのメッセージを受け取ることに気付きました:

$ git Push
Counting objects: 32, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (32/32), 2.94 KiB | 0 bytes/s, done.
Total 32 (delta 14), reused 0 (delta 0)
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: There are too many unreachable loose objects; run 'git Prune' to remove them.

To [email protected]:root/xxx.git
   15c3bbb..69e6d8b  xxxx -> xxx

誰もが同じ問題を抱えていることに気付くまで、しばらくの間、コンピューターから送信されると思っていました。

言うまでもなく、私の.gitフォルダーにはgc.logがなく、「git gc」または「git Prune」を使用しても効果がありません。

だから私の質問は次のとおりです。サーバーでホストされているリポジトリが何らかの形でクリーンではないのでしょうか?もしそうなら、私は実際にそれをどのようにきれいにするのですか?

私がこれまでに見つけた解決策はすべて、リポジトリのローカルコピーに関連しています。

また、Gitlabを使用してリポジトリをホストします。

編集:この質問を投稿して以来、Gitlabを使用してリポジトリを「ハウスクリーニング」しようとしましたが、これまでのところ何の結果もありません。

ありがとう

23
jlengrand

この後に issue 14357 (GitLab 8.6-以下)

手動修正は次のとおりです。

  • Worker1へのSSH
  • gitlab-org/gitlab-ceディレクトリにcdします
  • 実行rm gc.log、これには「警告:到達できないルーズオブジェクトが多すぎます。「git Prune」を実行してそれらを削除してください。」という行が含まれています。
  • 実行git Pruneそして、それが物事を壊さないことを祈った(それはありがたいことに壊さなかった)

しかし、GitLab 8.7以降では、 自動gcは無効 のように見えます。
これも (まだ開いたまま)問題13524 のコンテキストで行われます。

通常、リプッシュ、修正、または強制プッシュを必要とするその他のアクションの後、コミットをぶら下げることができます。

このような「参照解除された」コミットは、git gc内部で実行されるか、GitLabハウスキーピング機能を使用して実行されます。

特定のコミットに関連する議論があった場合-参照解除されたコミットがガベージコレクションされた後は利用できません。

コミットはプッシュイベントに記録されており、マージリクエストに追加されたシステムノートから利用できます。現在、GitLabでエラー500が生成されています。

更新:その問題は1か月後(2016年7月)にクローズされました。

  • MR 5062 :コメントなどの関連DBレコードを持つコミットをガベージコレクションしないでください

Gitガベージコレクションの実行時にコミットが保持されるようにします。
Git GCは、ブランチまたはタグに存在しないコミットをリポジトリから削除しますが、たとえばコメントやCIビルドがある場合は、これらのコミットの一部を保持したいと思います。

  • MR 4101 :リファクタリング:既存の配列ベースのdiff refをDiffRefsモデルに変換します
20
VonC