回答:
SHA sayのオブジェクト(ブロブ、ツリー、およびコミット)-810cae53e0f622d6804f063c04a83dbc3a11b7caは次の場所に格納されます
.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca
(すべてのオブジェクトが同じディレクトリに格納されているわけではないため、ファイルシステムのパフォーマンスを向上させるために最初の2文字で分割)
上記のように格納されたオブジェクトは、Looseオブジェクトと呼ばれます。
リポジトリを起動すると、ほとんどがルーズなオブジェクトを持っています。数値が高くなると非効率になり、パックファイルに格納されます。このようなオブジェクトは、パックされたオブジェクトと呼ばれます。
git gc
オブジェクトをパックするために実行するものです(通常、不要で数週間前のルーズオブジェクトも削除され、--prune=<date>
オプションを使用して、不要になったルーズオブジェクトを強制的に削除できます。コミットを修正するときのように。古いコミットオブジェクトはありません長く必要です。)
--prune
オプションはデフォルトで有効になっており、git gc
一般的な使用法(などcommit
)によって自動的にトリガーされるため、通常これを心配する必要はありません。私はgit guiを使用せず、ソースのどこでトリガーされるかを正確に見つけることはできませんが、独自のチェックを実行するかgc
、呼び出されたコマンドによってトリガーをインターセプトするだけです。ただし、心配する必要はありませんが、通常の使用方法が原因です。
git gc
手動で実行した後、大規模なプロジェクトのパフォーマンスは向上しましたか?緩いオブジェクトは非効率的であり、50,000は非常に大きな数であるため、改善する必要があると思います。また、パッキングにより、.git
フォルダーによって使用されるスペースも大幅に削減されることもわかりました。
Git Bookはそれをかなりよく説明しています:https : //git-scm.com/book/en/v2/Git-Internals-Packfiles
緩いオブジェクトはより単純な形式です。これは単に、ディスク上の単一のファイルに格納された圧縮データです。別のファイルに書き込まれたすべてのオブジェクト。
git gc
れ、素敵なGUIプログレスバーが表示されます(ほとんどの場合スタックしているように表示されます)。