少し前に、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を使用してリポジトリを「ハウスクリーニング」しようとしましたが、これまでのところ何の結果もありません。
ありがとう
この後に issue 14357 (GitLab 8.6-以下)
手動修正は次のとおりです。
rm gc.log
、これには「警告:到達できないルーズオブジェクトが多すぎます。「git Prune」を実行してそれらを削除してください。」という行が含まれています。git Prune
そして、それが物事を壊さないことを祈った(それはありがたいことに壊さなかった)しかし、GitLab 8.7以降では、 自動gcは無効 のように見えます。
これも (まだ開いたまま)問題13524 のコンテキストで行われます。
通常、リプッシュ、修正、または強制プッシュを必要とするその他のアクションの後、コミットをぶら下げることができます。
このような「参照解除された」コミットは、
git gc
内部で実行されるか、GitLabハウスキーピング機能を使用して実行されます。特定のコミットに関連する議論があった場合-参照解除されたコミットがガベージコレクションされた後は利用できません。
コミットはプッシュイベントに記録されており、マージリクエストに追加されたシステムノートから利用できます。現在、GitLabでエラー500が生成されています。
更新:その問題は1か月後(2016年7月)にクローズされました。
Gitガベージコレクションの実行時にコミットが保持されるようにします。
Git GCは、ブランチまたはタグに存在しないコミットをリポジトリから削除しますが、たとえばコメントやCIビルドがある場合は、これらのコミットの一部を保持したいと思います。