SYNOPSIS

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

DESCRIPTION

旧来、ブランチとタグのヒント(まとめて「refs」と呼ばれます)は、refごとに1つのファイルを $GIT_DIR/refs ディレクトリの下のディレクトリ(サブディレクトリ)に保存していました。多くのブランチヒントは頻繁に更新される傾向がありますが、ほとんどのタグと一部のブランチヒントは更新されません。リポジトリに数百または数千のタグがある場合、この 1ファイル毎に1ref形式 はストレージを浪費し、パフォーマンスを低下させます。

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

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

refが多すぎるリポジトリを処理するための推奨される方法は、refを --all で一度パックし、ときどき git pack-refs を実行することです。タグは定義上静止しており、変更されることは期待されていません。ブランチヘッドは最初の pack-refs --all でパックされますが、現在アクティブなブランチヘッドのみはアンパックされ、その後 pack-refs ( --all なし)ではアンパックされたままになります。

OPTIONS

--all

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

--no-prune

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

--auto

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

  • ファイルの場合: --auto の特別な取り扱いは実装されていません。

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

--include <pattern>

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

--exclude <pattern>

指定された glob(7) パターンにマッチする ref をパックしません。 このオプションを繰り返し指定すると、 除外パターンが蓄積されます。 パターンのリストをクリアして再セットするには、 --no-exclude を使用します。 とある ref がすでにパックされている場合、 それを --exclude で包含してもアンパックされません。

--all と一緒に使用すると、 提供された --exclude パターンのいずれにもマッチしない 緩い ref (loose refs)のみをパックします。

--include と一緒に使用すると、 --include で得られた ref から、 --exclude で得られた ref を引いたものがパックされます。

BUGS

pack-refs メカニズムが導入される前に作成された古い文書では、 "branch <branch> exists" という意味の場合でも ".git/refs/heads/<branch> file exists" などと紹介される場合があります。

GIT

Part of the git(1) suite