ホームページ  >  記事  >  開発ツール  >  git Pack ファイルの用途は何ですか?

git Pack ファイルの用途は何ですか?

WBOY
WBOYオリジナル
2022-06-30 17:41:486923ブラウズ

git では、パック ファイルはディスク キャッシュを効果的に使用し、最近参照したオブジェクトを読み取るための一般的なコマンドのアクセス モードを提供します。git は、指定された複数のオブジェクトをパッケージ ファイル (packfile) バイナリ ファイルにパッケージ化して、スペースを節約し、効率を向上させます。 。

git Pack ファイルの用途は何ですか?

この記事の動作環境: Windows 10 システム、Git バージョン 2.30.0、Dell G3 コンピューター。

git のパック ファイルの用途は何ですか。

Git のパック ファイルは、ディスク キャッシュを効率的に使用するように慎重に構築されており、「優れた」アクセス モデルを提供します。

Git のパッケージ ファイル形式は非常に柔軟です (Documentation/Technology/Package-format.txt を参照するか、Git コミュニティ ブックにパッケージ ファイルを配置します)。

パックされたファイルは、主に 2 つの方法でオブジェクトを保存します。「削除を取り消す」(元のオブジェクト データを取得して圧縮する) または「削除」(他のオブジェクトに対して差分を計算し、その結果得られるデータ圧縮を差分する)。

パケットに格納されるオブジェクトの順序は任意であり (オブジェクト タイプ、オブジェクト名、その他の属性による必要はありません)、削除されたオブジェクトは、同じオブジェクトの他の適切なオブジェクトに対して作成できます。型オブジェクト。

Git の Pack-objects コマンドは、一般的なコマンドの優れた参照場所を提供するいくつかのヒューリスティックを使用します。

これらのヒューリスティックは、削除されたオブジェクトの基本オブジェクトの選択とオブジェクトの順序付けの両方を制御します。

各メカニズムはほとんど独立していますが、いくつかの共通の目標を共有しています。

Git はデルタ圧縮されたオブジェクトの長いチェーンを形成しますが、ヒューリスティックは「古い」オブジェクトのみが長いチェーンの最後に存在することを保証しようとします。

core.deltaBaseCacheLimit は、デルタ ベース キャッシュ (サイズは構成変数によって制御される) を自動的に使用し、大量のオブジェクト (たとえば、 git log -p として)。

デルタ圧縮ヒューリスティック 一般的な Git リポジトリには多数のオブジェクトが保存されているため、すべてのオブジェクトを合理的に比較して最小のデルタ表現を生成するペア (およびチェーン) を見つけることは不可能です。デルタ ベース選択ヒューリスティックは、類似したファイル名とサイズを持つオブジェクト間で適切なデルタ ベースが見つかるという考えに基づいています。

オブジェクトの各タイプは個別に処理されます (つまり、あるタイプのオブジェクトが別のタイプのオブジェクトの増分ベースとして使用されることはありません)。

増分ベース選択の目的で、オブジェクトは (主に) ファイル名とサイズによって並べ替えられます。このソートされたリストへのウィンドウは、潜在的な増分ベースとみなされるオブジェクトの数を制限するために使用されます。

拡張知識:

.git/objects/pack ファイルが大きすぎます

開発プロセス中に大きすぎるファイルをアップロードしたことが原因である可能性があります、削除されましたが、まだ git レコードに保存されています。

解決策:

1. ウェアハウス上のプロジェクトを削除し、コードを再送信します。

2. 履歴レコードを完全にクリアします

1. 3 つの最大のファイルを特定します

git verify-pack -v .git/objects/pack/pack-8eaeb...9e.idx | sort -k 3 -n | tail -3
296169a146c50dbc100a5d0ee5be87a45cd7cbb3 blob   50296832 49474116 291684796
 
aae2c1bf6109f2729502349722b4c3402626d755 blob   77762481 77330392 78759794
 
35047899fd3b0dd637b0da2086e7a70fe27b1ccb blob   100534272 100014418 191670176

2. 大きなファイルのファイル名をクエリします

git rev-list --objects --all | grep 35047899fd3b0dd637b0da2086e7a70fe27b1ccb
35047899fd3b0dd637b0da2086e7a70fe27b1ccb /wabapi/bulid/master-0.0.1.jar

3 。履歴内のすべてのツリーからファイルを削除します

git filter-branch --index-filter 'git rm --cached --ignore-unmatch  /wabapi/bulid/master-0.0.1.jar'

4.次のステートメントを実行します

rm -rf .git/refs/original/
 
git reflog expire --expire=now --all
 
git fsck --full --unreachable
 
git repack -A -d
 
git gc --aggressive --prune=now
 
git push --force

推奨学習: "Git チュートリアル"

以上がgit Pack ファイルの用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。