Git を使用して、一連のバイナリ ファイルをバージョン管理しています。それらはかなりよく圧縮されますが、私の中央リポジトリは、プッシュしても圧縮されていないようです。彼らは私のクォータのかなりの量を食い尽くしているので、リモートリポジトリにGCを強制的に実行させる方法があるかどうかを調べていました.
これは可能ですか?私はProject Lockerに取り組んでいるので、自分で SSH アクセスしてレポを GC できるとは思いません。何か案は?ありがとう。
Git を使用して、一連のバイナリ ファイルをバージョン管理しています。それらはかなりよく圧縮されますが、私の中央リポジトリは、プッシュしても圧縮されていないようです。彼らは私のクォータのかなりの量を食い尽くしているので、リモートリポジトリにGCを強制的に実行させる方法があるかどうかを調べていました.
これは可能ですか?私はProject Lockerに取り組んでいるので、自分で SSH アクセスしてレポを GC できるとは思いません。何か案は?ありがとう。
自分で実行できない場合git gc
は、だまして自動的に実行させる必要があります。その場合、完全に制御することはできませんが、少なくとも実行できるようにする必要があります。
git gc --auto
いくつかのコマンドで実行されます。ここで関連するのは receive-pack で、プッシュの一部としてパックを受信するためにリモートで実行されます。gc --auto
十分な緩いオブジェクトがある場合にのみ再梱包します。カットオフは構成パラメーターによって決定され、gc.auto
デフォルトは 6700 です。
リモートの gitconfig にアクセスできる場合は、そのカットオフを一時的に 1 に設定できます。リポジトリには少なくとも 1 つのルーズ オブジェクトが確実に存在するはずgc --auto
です。
リモートの gitconfig にアクセスできない場合、私ができることは、人為的に多数のルーズ オブジェクトを作成することだけです。ブランチを作成し、(異なる内容の) 小さなファイルの束をそれにコミットし、ブランチをリモートにプッシュしてから、リモートからブランチを削除することで、これを行うことができます。(コンテンツを変更することが重要です。そうしないと、同じブロブを使用するだけです。) すすぎ、繰り返します。
それは本当に彼らが最後に解決する必要がある問題です。彼らは受信後フックや cron ジョブなどでそれを行うことができますが、リポジトリを維持することになっている場合、それはさまざまな理由からその一部です。
フォームgit-gc
のマニュアルページ:
一部の git コマンドは、自動的に git gc を実行する場合があります。詳細については、以下の --auto フラグを参照してください。
そしてさらに:
--自動
このオプションを使用すると、git gc はハウスキーピングが必要かどうかをチェックします。そうでない場合は、何も実行せずに終了します。一部の git コマンドは、多くのルーズ オブジェクトを作成する可能性のある操作を実行した後に git gc --auto を実行します。
リポジトリ内のルーズ オブジェクトまたはパックが多すぎる場合は、ハウスキーピングが必要です。ルーズ オブジェクトの数が gc.auto 構成変数の値を超える場合、すべてのルーズ オブジェクトは git repack -d -l を使用して 1 つのパックに結合されます。gc.auto の値を 0 に設定すると、ルーズ オブジェクトの自動パッキングが無効になります。
パックの数が gc.autopacklimit の値を超える場合、既存のパック (.keep ファイルでマークされたものを除く) は、git repack の -A オプションを使用して単一のパックに統合されます。gc.autopacklimit を 0 に設定すると、パックの自動統合が無効になります。
そして最後に:
git gc --auto コマンドはpre-auto-gcフックを実行します。詳細については、githooks(5) を参照してください。