日本語 ▾ トピック ▾ 最新バージョン ▾ git-pack-refs は 2.45.0 で最終更新されました

名称

git-pack-refs - 効率的なリポジトリアクセスを目的としたヘッドとタグのパック

概要

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

説明

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

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

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

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

オプション

--all

このコマンドはデフォルトで、既存のすべてのタグとパック済みのリファレンスをパックし、その他のリファレンスはそのままにします。これは、ブランチは活発に開発されることが想定されており、その先端をパックしてもパフォーマンス向上には寄与しないためです。このオプションを使用すると、隠されたリファレンス、壊れたリファレンス、シンボリックリファレンスを除き、すべてのリファレンスもパックされます。多くの履歴的関心のあるブランチを持つリポジトリに有用です。

--no-prune

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

--auto

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

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

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

--include <パターン>

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

--exclude <パターン>

指定されたglob(7)パターンに一致するリファレンスはパックしません。このオプションを繰り返すと、除外パターンが蓄積されます。パターンリストをクリアし、リセットするには--no-excludeを使用します。すでにパックされているリファレンスは、--excludeで指定してもアンパックされません。

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

--includeと一緒に使用した場合、--includeに提供されたリファレンスのうち、--excludeに提供されたリファレンスを除いたものがパックされます。

バグ

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

Git

git[1] スイートの一部

scroll-to-top