日本語 ▾ トピック ▾ 最新版 ▾ git-pack-refs は2.50.0で最終更新されました

名前

git-pack-refs - 効率的なリポジトリアクセスを実現するために、ヘッドとタグをパックする

概要

git pack-refs [--all] [--no-prune] [--auto] [--include <pattern>] [--exclude <pattern>]

説明

従来、ブランチの先端とタグ(総称してrefsとして知られる)は、$GIT_DIR/refsディレクトリの下の(サブ)ディレクトリに、1つのrefにつき1つのファイルとして保存されていました。多くのブランチ先端は頻繁に更新される傾向がありますが、ほとんどのタグと一部のブランチ先端は決して更新されません。リポジトリに何百、何千ものタグがある場合、この1つのrefにつき1つのファイルという形式は、ストレージを無駄にし、パフォーマンスを低下させます。

このコマンドは、$GIT_DIR/packed-refsという単一のファイルにrefsを保存することで、ストレージとパフォーマンスの問題を解決するために使用されます。従来の$GIT_DIR/refsディレクトリ階層にrefが見つからない場合、このファイルで検索され、見つかった場合は使用されます。

ブランチのその後の更新は、常に$GIT_DIR/refsディレクトリ階層の下に新しいファイルを作成します。

refが多すぎるリポジトリを扱う推奨される方法は、一度--allでrefsをパックし、時々git pack-refsを実行することです。タグは定義上固定されており、変更されることは想定されていません。ブランチヘッドは最初のpack-refs --allでパックされますが、現在アクティブなブランチヘッドのみがアンパックされ、次のpack-refs--allなし)ではそれらはアンパックされたままになります。

オプション

--all

このコマンドはデフォルトで、すべてのタグとすでにパックされているrefsをパックし、他のrefsはそのままにします。これは、ブランチは活発に開発されることが期待されており、その先端をパックしてもパフォーマンスには役立たないためです。このオプションを使用すると、隠されたrefs、壊れたrefs、シンボリックrefsを除いて、すべてのrefsもパックされます。多くの歴史的な関心のあるブランチを持つリポジトリに役立ちます。

--no-prune

このコマンドは通常、パック後、$GIT_DIR/refs階層下のルーズなrefsを削除します。このオプションは、削除しないように指示します。

--auto

refデータベースの現在の状態に応じて、必要に応じてrefsをパックします。この動作は、リポジトリで使用されるref形式に依存し、将来変更される可能性があります。

  • "files": --autoに関する特別な処理は実装されていません。

  • "reftable": テーブルは幾何級数を形成するように圧縮されます。2つのテーブルNとN+1(N+1が新しい)の場合、NがN+1の少なくとも2倍の大きさであるという特性が維持されます。この特性に違反するテーブルのみが圧縮されます。

--include <pattern>

glob(7)パターンに基づいてrefsをパックします。このオプションの繰り返しは、包含パターンを累積します。refが--include--excludeの両方に含まれる場合、--excludeが優先されます。--includeを使用すると、デフォルトですべてのタグが包含されなくなります。シンボリックrefsと壊れたrefsは決してパックされません。--allと一緒に使用すると、何もしません。--no-includeを使用してパターンのリストをクリアおよびリセットします。

--exclude <pattern>

指定されたglob(7)パターンに一致するrefsはパックしません。このオプションの繰り返しは、除外パターンを累積します。--no-excludeを使用してパターンのリストをクリアおよびリセットします。すでにパックされているrefを--excludeで包含しても、アンパックされません。

--allと一緒に使用する場合、提供された--excludeパターンに一致しないルーズなrefsのみをパックします。

--includeと一緒に使用する場合、--includeに提供されたrefsから--excludeに提供されたrefsを差し引いたものがパックされます。

バグ

packed-refsメカニズムが導入される前の古いドキュメントでは、「ブランチ<branch>が存在する」という意味で「.git/refs/heads/<branch>ファイルが存在する」と記載されている場合があります。

GIT

git[1]スイートの一部

scroll-to-top