Git GUIが参照する「ルーズオブジェクト」とは何ですか?


219

Git GUIを開くと、を参照するポップアップメッセージが表示されますloose objects。私はそうしましたgit gc、そしてそれはメッセージを取り除きました。

これがloose objects再発するのを防ぐにはどうすればよいですか?


ばらばらのオブジェクトをすぐに梱包するかどうかを尋ねられたら、ポップアップメッセージで[ はい ]をクリックするだけです。Git GUIが実行さgit gcれ、素敵なGUIプログレスバーが表示されます(ほとんどの場合スタックしているように表示されます)。
ADTC 2014

回答:


144

SHA sayのオブジェクト(ブロブ、ツリー、およびコミット)-810cae53e0f622d6804f063c04a83dbc3a11b7caは次の場所に格納されます

.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca

(すべてのオブジェクトが同じディレクトリに格納されているわけではないため、ファイルシステムのパフォーマンスを向上させるために最初の2文字で分割)

上記のように格納されたオブジェクトは、Looseオブジェクトと呼ばれます。

リポジトリを起動すると、ほとんどがルーズなオブジェクトを持っています。数値が高くなると非効率になり、パックファイルに格納されます。このようなオブジェクトは、パックされたオブジェクトと呼ばれます。

 git gc

オブジェクトをパックするために実行するものです(通常、不要で数週間前のルーズオブジェクトも削除され、--prune=<date>オプションを使用して、不要になったルーズオブジェクトを強制的に削除できます。コミットを修正するときのように。古いコミットオブジェクトはありません長く必要です。)


3
この--pruneオプションはデフォルトで有効になっており、git gc一般的な使用法(などcommit)によって自動的にトリガーされるため、通常これを心配する必要はありません。私はgit guiを使用せず、ソースのどこでトリガーされるかを正確に見つけることはできませんが、独自のチェックを実行するかgc、呼び出されたコマンドによってトリガーをインターセプトするだけです。ただし、心配する必要はありませんが、通常の使用方法が原因です。
Cascabel

21
ばらばらのオブジェクトを梱包することの欠点はありますか?そうでない場合、なぜGitはそれを自動的に行わないのですか?
Louis Rhys

13
それが自動的に起こるというのは本当ではないと思います。私は頻繁にコミットしますが、言及された「git gui」には50,000のルーズオブジェクトがありました(そして、gitが手動のGCなしで〜4年間にわたって非常に遅く、大規模なプロジェクトであるのはなぜか疑問に思っていました)
Kevin

1
@Kevin git gc手動で実行した後、大規模なプロジェクトのパフォーマンスは向上しましたか?緩いオブジェクトは非効率的であり、50,000は非常に大きな数であるため、改善する必要があると思います。また、パッキングにより、.gitフォルダーによって使用されるスペースも大幅に削減されることもわかりました。
ADTC、2014

3
@LouisRhys、「オブジェクトがディスクに書き込まれるとき、そのフォーマットはアクセスにかかるコストが低いため、多くの場合ルーズフォーマットです。ただし、最終的にはオブジェクトをパックしてスペースを節約する必要があります」-Git Bookから以下の回答の
クリス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.