知っているように、定期的にgit gc
を実行して、.git/objects
の下にオブジェクトをパックできます。
ただし、リモートの中央Gitリポジトリの場合(裸かどうか)、多くのプッシュの後、myproj.git/objects
の下に多くのファイルがあります。各コミットはそこに新しいファイルを作成するようです。
そのように多くのファイルをパックするにはどうすればよいですか? (ローカルクローンリポジトリではなく、リモートの中央ベアリポジトリにあるものを意味します。)
コミットが行われた後、必要に応じてgcを実行するようにリモートリポジトリを設定する必要があります。 git-gcおよびgit-configのマニュアルページのgc.autoのドキュメントを参照してください。
ただし、リモートレポジトリはガベージコレクションをそれほど必要としません。これは、ダングリング(到達不能)コミットがほとんどないためです。これらは通常、ブランチの削除やリベースなど、通常はローカルリポジトリでのみ発生します。
したがって、gcは、実際のガベージを削除するのではなく、ストレージスペースを節約するための再梱包にさらに必要です。これを処理するには、gc.auto変数で十分です。
定期的かつ自動的にこれを処理するプロセスが必要ですが、実行しても問題ありません
git gc
裸のリポジトリ上
git@domU:/pix/git/repositories/abd.git$ ls -l
total 28
drwxrwxr-x 2 git git 6 2010-06-06 02:44 branches
-rw-rw-r-- 1 git git 66 2010-06-06 02:44 config
-rw-r--r-- 1 git git 23 2011-03-15 18:19 description
-rw-rw-r-- 1 git git 23 2010-06-06 02:44 HEAD
drwxrwxr-x 2 git git 4096 2010-06-06 02:44 hooks
drwxrwxr-x 2 git git 20 2010-06-06 02:44 info
drwxrwxr-x 260 git git 8192 2010-09-01 00:26 objects
drwxrwxr-x 4 git git 29 2010-06-06 02:44 refs
$ git gc
Counting objects: 3833, done.
Compressing objects: 31% (1085/3500)...
この質問 ガベージコレクションを実行する頻度を明らかにする必要があります。
最も簡単なオプションは、git gc
を定期的に実行するために、WindowsのスケジュールされたタスクまたはUnixのcronジョブを使用することです。このように、あなたはそれについて考える必要さえありません。
多くのプッシュの後、
myproj.git/objects
の下に多くのファイルがあります
Git 2.11+(2016年第4四半期)とpre-receiveフックはそれほど多くありません。
そのシナリオでは、git gc
をトリガーする必要はまったくありません。
commit 62fe0eb 、 commit e34c2e 、 commit 722ff7f 、 commit 2564d99 、 commit 526f108 を参照してください(2016年10月3日)by ジェフ・キング(peff
) .
( 浜野潤夫-gitster
- in コミット25ab004 、2016年10月17日)
receive-pack
:pre-receiveが受け入れるまでオブジェクトを隔離します「git Push」の受信側が受信した履歴を検査し、プッシュを拒否することを決定するには、送信側から送信されたオブジェクトをフックと接続性チェックのメカニズムで利用できるようにする必要があります。従来は、受信リポジトリにオブジェクトを保存し、「
git gc
」に期限切れを許可していました。代わりに、新しく受け取ったオブジェクトを一時領域に保存し、チェックを受け入れるかどうかを決定し、決定したらリポジトリに移行するか、すぐにパージする間のみ、代替オブジェクトストアメカニズムを再利用して、それらを使用可能にします。
その一時領域は、新しい環境変数GIT_QUARANTINE_ENVIRONMENT
によって設定されます。
そうすれば、(大きな)プッシュがpre-receive
フックによって拒否された場合、それらの大きなオブジェクトはgit gc
がクリーンアップするのを待って90日間待機しません。