日本語 ▾ トピック ▾ 最新バージョン ▾ git-for-each-ref は2.47.0で最終更新されました

名前

git-for-each-ref - 各参照に関する情報を出力する

概要

git for-each-ref [--count=<count>] [--shell|--perl|--python|--tcl]
		   [(--sort=<key>)…​] [--format=<format>]
		   [--include-root-refs] [ --stdin | <pattern>…​ ]
		   [--points-at=<object>]
		   [--merged[=<object>]] [--no-merged[=<object>]]
		   [--contains[=<object>]] [--no-contains[=<object>]]
		   [--exclude=<pattern> …​]

説明

`<pattern>` に一致するすべての参照を反復処理し、指定された `<key>` のセットに従ってソートした後、指定された `<format>` に従ってそれらを表示します。`<count>` が指定されている場合、その数の参照を表示した後に停止します。`<format>` の補間された値は、オプションで指定されたホスト言語の文字列リテラルとして引用符で囲むことができ、その言語での直接評価を可能にします。

オプション

<パターン>…​

1つ以上のパターンが指定された場合、fnmatch(3) を使用するか、または文字通り(後者の場合は完全に一致するか、スラッシュまで先頭から一致するか)のいずれかで、少なくとも1つのパターンに一致する参照のみが表示されます。

--stdin

`--stdin` が指定された場合、パターンのリストは引数リストからではなく標準入力から読み込まれます。

--count=<カウント>

デフォルトでは、このコマンドは `<pattern>` に一致するすべての参照を表示します。このオプションを使用すると、その数の参照を表示した後に停止します。

--sort=<キー>

ソートするフィールド名。値の降順でソートするには ` - ` をプレフィックスとして付けます。指定がない場合、`refname` が使用されます。--sort=<key> オプションを複数回使用できます。その場合、最後のキーが主キーになります。

--format=<フォーマット>

表示されている参照とその参照が指すオブジェクトから `%(fieldname)` を補間する文字列。さらに、文字列リテラル `%%` は ` % ` とレンダリングされ、`%xx` (ここで `xx` は16進数字) は16進コード `xx` の文字としてレンダリングされます。例えば、`%00` は `\0` (NUL) に、`%09` は `\t` (TAB) に、`%0a` は `\n` (LF) に補間されます。

指定がない場合、`<format>` はデフォルトで `%(objectname) SPC %(objecttype) TAB %(refname)` になります。

--color[=<いつ>]

`--format` オプションで指定された色を尊重します。`<when>` フィールドは `always`、`never`、または `auto` のいずれかである必要があります ( `<when>` が省略された場合、`always` が指定されたものとして動作します)。

--shell
--perl
--python
--tcl

指定された場合、`%(fieldname)` プレースホルダーを置き換える文字列は、指定されたホスト言語に適した文字列リテラルとして引用符で囲まれます。これは、直接 `eval` 可能なスクリプトレットを生成することを意図しています。

--points-at=<オブジェクト>

指定されたオブジェクトを指す参照のみをリストします。

--merged[=<オブジェクト>]

指定されたコミット (指定されていない場合は HEAD) から到達可能な先端を持つ参照のみをリストします。

--no-merged[=<オブジェクト>]

指定されたコミット (指定されていない場合は HEAD) から到達不可能な先端を持つ参照のみをリストします。

--contains[=<オブジェクト>]

指定されたコミット (指定されていない場合は HEAD) を含む参照のみをリストします。

--no-contains[=<オブジェクト>]

指定されたコミット (指定されていない場合は HEAD) を含まない参照のみをリストします。

--ignore-case

参照のソートとフィルタリングは大文字と小文字を区別しません。

--omit-empty

フォーマットされた参照の後に改行を出力しません。ただし、フォーマットが空文字列に展開される場合は出力しません。

--exclude=<パターン>

1つ以上のパターンが指定された場合、除外されたパターンに一致しない参照のみが表示されます。一致は上記の `<pattern>` と同じルールを使用して行われます。

--include-root-refs

通常の参照とは別に、ルート参照 (HEAD および擬似参照) をリストします。

フィールド名

参照されているオブジェクト内の構造化フィールドからの様々な値は、結果の出力に補間したり、ソートキーとして使用したりできます。

すべてのオブジェクトについて、以下の名前が使用できます

refname

参照の名前 ($GIT_DIR/ の後の部分)。参照の曖昧さのない短い名前には `:short` を追加します。オプション `core.warnAmbiguousRefs` は厳密な省略モードを選択するために使用されます。`lstrip=<N>` (`rstrip=<N>`) が追加された場合、参照名 (例: `%(refname:lstrip=2)` は `refs/tags/foo` を `foo` に、`%(refname:rstrip=2)` は `refs/tags/foo` を `refs` に変換します) の先頭 (末尾) から `<N>` 個のスラッシュ区切りのパスコンポーネントを削除します。`<N>` が負の数の場合、指定された末尾から必要な数のパスコンポーネントを削除して `-<N>` 個のパスコンポーネントを残します (例: `%(refname:lstrip=-2)` は `refs/tags/foo` を `tags/foo` に、`%(refname:rstrip=-1)` は `refs/tags/foo` を `refs` に変換します)。参照が十分なコンポーネントを持たない場合、正の <N> で削除すると結果は空文字列になり、負の <N> で削除すると完全な参照名になります。どちらもエラーではありません。

`strip` は `lstrip` の同義語として使用できます。

objecttype

オブジェクトのタイプ (`blob`、`tree`、`commit`、`tag`)。

objectsize

オブジェクトのサイズ (git cat-file -s が報告するものと同じ)。ディスク上でオブジェクトが占めるサイズをバイト単位で取得するには `:disk` を追加します。下記の `CAVEATS` セクションにあるディスク上のサイズに関する注意を参照してください。

objectname

オブジェクト名 (別名 SHA-1)。オブジェクト名の曖昧さのない省略形には `:short` を追加します。希望の長さのオブジェクト名の省略形には `:short=<length>` を追加します。ここで最小の長さは MINIMUM_ABBREV です。一意のオブジェクト名を確保するために長さが超過する場合があります。

deltabase

これは、指定されたオブジェクトがデルタとして格納されている場合、そのデルタベースのオブジェクト名に展開されます。そうでなければ、nullオブジェクト名 (すべてゼロ) に展開されます。

upstream

表示されている参照の「上流」と見なすことができるローカル参照の名前。上記の `refname` と同じように `:short`、`:lstrip`、`:rstrip` を尊重します。さらに、`[ahead N, behind M]` を表示する `:track` と、簡潔なバージョン ( `>` (ahead), `<` (behind), `<>` (ahead and behind), `=` (in sync)) を表示する `:trackshort` を尊重します。`:track` は、不明な上流参照が見つかった場合には `[gone]` も出力します。追跡情報を括弧なしで表示するには (つまり "ahead N, behind M")、`:track,nobracket` を追加します。

リモートトラッキングブランチ `%(upstream)` の場合、`%(upstream:remotename)` はリモートの名前を、`%(upstream:remoteref)` は追跡されているリモート参照の名前をそれぞれ指します。言い換えれば、リモートトラッキングブランチは、`%(upstream:remotename)` からフェッチするために参照スペック `%(upstream:remoteref):%(upstream)` を使用して、明示的かつ個別に更新できます。

参照に追跡情報が関連付けられていない場合、効果はありません。`nobracket` を除くすべてのオプションは相互に排他的ですが、一緒に使用された場合は最後のオプションが選択されます。

push

表示されている参照の `@{push}` 位置を表すローカル参照の名前。`upstream` と同様に `:short`、`:lstrip`、`:rstrip`、`:track`、`:trackshort`、`:remotename`、`:remoteref` オプションを尊重します。`@{push}` 参照が設定されていない場合は空文字列を生成します。

HEAD

HEADが現在の参照(チェックアウトされているブランチ)と一致する場合は `*`、それ以外の場合は ` `。

color

出力の色を変更します。`:<colorname>` が続き、カラー名は git-config[1] の「CONFIGURATION FILE」セクションの「Values」で説明されています。例: `%(color:bold red)`。

align

`%(align:…​)` と `%(end)` の間のコンテンツを左寄せ、中央寄せ、または右寄せします。「align:」の後に、カンマで区切られた `width=<width>` と `position=<position>` が任意の順序で続きます。ここで `<position>` は `left`、`right`、`middle` のいずれかで、デフォルトは `left`、`<width>` は配置後のコンテンツの合計長です。簡潔にするため、「width=」や「position=」のプレフィックスは省略でき、代わりに単独の <width> と <position> を使用できます。例えば、`%(align:<width>,<position>)`。コンテンツの長さが幅よりも長い場合、配置は実行されません。`--quote` と共に使用した場合、`%(align:…​)` と `%(end)` の間のすべてが引用符で囲まれますが、ネストされている場合は最上位レベルのみが引用符処理を実行します。

if

`%(if)…​%(then)…​%(end)` または `%(if)…​%(then)…​%(else)…​%(end)` として使用されます。`%(if)` の後に値または文字列リテラルを持つアトムがある場合、`%(then)` の後のすべてが出力されます。それ以外で `%(else)` アトムが使用されている場合、`%(else)` の後のすべてが出力されます。`%(then)` の前の文字列を評価する際にスペースを無視します。これは、`"*"` または `" "` を出力する `%(HEAD)` アトムを使用し、`if` 条件を `HEAD` 参照にのみ適用したい場合に便利です。`%(if:…​)` と `%(then)` アトムの間の値を指定された文字列と比較するには、`:equals=<string>` または `:notequals=<string>` を追加します。

symref

指定されたシンボリック参照が指す参照。シンボリック参照でない場合、何も出力されません。上記の `refname` と同じように `:short`、`:lstrip`、`:rstrip` オプションを尊重します。

signature

コミットのGPG署名。

signature:grade

良好 (有効) な署名には「G」、不正な署名には「B」、有効性が不明な良好な署名には「U」、期限切れの良好な署名には「X」、期限切れのキーで作成された良好な署名には「Y」、取り消されたキーで作成された良好な署名には「R」、署名をチェックできない場合 (例: キーが見つからない) には「E」、署名がない場合には「N」を表示します。

signature:signer

コミットのGPG署名の署名者。

signature:key

コミットのGPG署名のキー。

signature:fingerprint

コミットのGPG署名のフィンガープリント。

signature:primarykeyfingerprint

コミットのGPG署名のプライマリキーフィンガープリント。

signature:trustlevel

コミットのGPG署名の信頼レベル。可能な出力は `ultimate`、`fully`、`marginal`、`never`、`undefined` です。

worktreepath

参照がリンクされた作業ツリーでチェックアウトされている場合、その作業ツリーへの絶対パス。それ以外の場合は空文字列。

ahead-behind:<コミットティッシュ>

出力される参照とフォーマットで指定された `<committish>` を比較した際に、それぞれ先行コミット数と後続コミット数を示す、スペースで区切られた2つの整数。

is-base:<コミットティッシュ>

多くても1行で、`(<committish>)` が表示され、`<committish>` を生成したブランチの開始点として最も可能性が高い参照を示します。この選択はヒューリスティックを使用して行われます: `<committish>` の第一親履歴にはあるが、参照の第一親履歴にはないコミットの数を最小化する参照を選択します。

例えば、いくつかの参照の第一親履歴の次の図を考えてみましょう。

*--*--*--*--*--* refs/heads/A
\
 \
  *--*--*--* refs/heads/B
   \     \
    \     \
     *     * refs/heads/C
      \
       \
	*--* refs/heads/D

ここで、`A`、`B`、`C` がフィルタリングされた参照であり、フォーマット文字列が `%(refname):%(is-base:D)` である場合、出力は次のようになります。

refs/heads/A:
refs/heads/B:(D)
refs/heads/C:

これは、`D` の第一親履歴がフィルタリングされた参照の第一親履歴と最も早く交差するのが `B` と `C` の共通の第一親祖先であり、同点の場合はソート順で最も早い参照が選択されるためです。

このトークンは、`<committish>` の第一親履歴がフィルタリングされた参照の第一親履歴と交差しない場合には表示されないことに注意してください。

describe[:オプション]

git-describe[1] のような人間が読める名前。説明できないコミットの場合は空文字列。`describe` 文字列の後にはコロンと1つ以上のカンマ区切りのオプションが続く場合があります。

tags=<真偽値>

注釈付きタグだけでなく、軽量タグも考慮します。git-describe[1] の対応するオプションで詳細を確認してください。

abbrev=<数値>

少なくとも <number> 桁の16進数を使用します。git-describe[1] の対応するオプションで詳細を確認してください。

match=<パターン>

指定された `glob(7)` パターンに一致するタグのみを考慮します。"refs/tags/" プレフィックスは除外します。git-describe[1] の対応するオプションで詳細を確認してください。

exclude=<パターン>

指定された `glob(7)` パターンに一致するタグを考慮しません。"refs/tags/" プレフィックスは除外します。git-describe[1] の対応するオプションで詳細を確認してください。

上記に加えて、コミットおよびタグオブジェクトの場合、ヘッダーフィールド名 (`tree`、`parent`、`object`、`type`、`tag`) を使用して、ヘッダーフィールドの値を指定できます。`tree` および `parent` フィールドは、`objectname` と同様に修飾子 `:short` および `:short=<length>` と共に使用することもできます。

コミットおよびタグオブジェクトの場合、特別な `creatordate` および `creator` フィールドは、オブジェクトタイプに応じて `committer` または `tagger` フィールドからの適切な日付または名前-メール-日付のタプルに対応します。これらは、注釈付きタグと軽量タグが混在する作業を目的としています。

タグオブジェクトの場合、アスタリスク (`*`) で始まる `fieldname` は、タグオブジェクト自体の値ではなく、剥がされたオブジェクトの `fieldname` の値に展開されます。

値が名前-メール-日付のタプルであるフィールド (`author`、`committer`、`tagger`) には、指定されたコンポーネントを抽出するために `name`、`email`、`date` をサフィックスとして追加できます。メールフィールド (`authoremail`、`committeremail`、`taggeremail`) の場合、山括弧なしのメールアドレスを取得するには `:trim` を、トリミングされたメールアドレスから `@` 記号の前の部分を取得するには `:localpart` を追加できます。これらに加えて、.mailmap ファイルまたは mailmap.file や mailmap.blob 設定変数で設定されたファイルに従って名前とメールの値を取得するために、`:mailmap` オプションおよび対応する `:mailmap,trim` と `:mailmap,localpart` を使用できます (順序は問いません) (詳細は gitmailmap[5] を参照)。

オブジェクトの生データは `raw` です。

raw:size

オブジェクトの生データサイズ。

`--format=%(raw)` は `--python`、`--shell`、`--tcl` と一緒に使用できないことに注意してください。そのような言語では、文字列変数タイプで任意のバイナリデータをサポートしない可能性があるためです。

コミットまたはタグオブジェクトのメッセージは `contents` で、そこから `contents:<part>` を使用してさまざまな部分を抽出できます。

contents:size

コミットまたはタグメッセージのバイト単位のサイズ。

contents:subject

メッセージの最初の段落 (通常は1行) は、コミットまたはタグメッセージの「件名」として扱われます。`contents:subject` の代わりに、`subject` フィールドも同じ結果を得るために使用できます。ファイル名に適した件名行にするには、`subject` に `:sanitize` を追加できます。

contents:body

「件名」に続くコミットまたはタグメッセージの残り。

contents:signature

タグのオプションのGPG署名。

contents:lines=N

メッセージの最初の `N` 行。

さらに、git-interpret-trailers[1] によって解釈されるトレーラーは、`trailers[:options]` (または、過去のエイリアス `contents:trailers[:options]` を使用しても可) として取得されます。有効な [:option] 値については、git-log[1] の `trailers` セクションを参照してください。

ソート目的の場合、数値を持つフィールドは数値順にソートされます (`objectsize`、`authordate`、`committerdate`、`creatordate`、`taggerdate`)。その他のすべてのフィールドは、バイト値順にソートするために使用されます。

バージョンごとにソートするオプションもあります。これは、フィールド名 `version:refname` またはそのエイリアス `v:refname` を使用して行えます。

いずれの場合も、参照が指すオブジェクトに適用できないフィールドを参照するフィールド名がエラーを引き起こすことはありません。代わりに空の文字列が返されます。

日付型フィールドの特殊なケースとして、日付フォーマット名を `:` の後に続けて日付のフォーマットを指定できます (git-rev-list[1] の `--date` オプションが取る値を参照)。このフォーマットが `--sort` キーで提供された場合、参照は基礎となるタイムスタンプの数値ではなく、フォーマットされた文字列のバイト値に従ってソートされます。

`%(align)` や `%(if)` のようないくつかのアトムは、常に一致する `%(end)` を必要とします。これらを「開始アトム」と呼び、時には `%($open)` と表記します。

スクリプト言語固有のクォーティングが有効な場合、最上位の開始アトムとその一致する `%(end)` の間のすべては、開始アトムのセマンティクスに従って評価され、最上位からの結果のみが引用符で囲まれます。

フォーマットされたテキストを直接生成する例。最新のタグ付きコミットを3つ表示します。

#!/bin/sh

git for-each-ref --count=3 --sort='-*authordate' \
--format='From: %(*authorname) %(*authoremail)
Subject: %(*subject)
Date: %(*authordate)
Ref: %(*refname)

%(*body)
' 'refs/tags'

出力に対するシェルevalの使用を示す簡単な例で、`--shell` の使用法を示します。すべてのヘッドのプレフィックスをリストします。

#!/bin/sh

git for-each-ref --shell --format="ref=%(refname)" refs/heads | \
while read entry
do
	eval "$entry"
	echo `dirname $ref`
done

タグに関するもう少し詳細なレポートで、フォーマットがスクリプト全体になりうることを示します。

#!/bin/sh

fmt='
	r=%(refname)
	t=%(*objecttype)
	T=${r#refs/tags/}

	o=%(*objectname)
	n=%(*authorname)
	e=%(*authoremail)
	s=%(*subject)
	d=%(*authordate)
	b=%(*body)

	kind=Tag
	if test "z$t" = z
	then
		# could be a lightweight tag
		t=%(objecttype)
		kind="Lightweight tag"
		o=%(objectname)
		n=%(authorname)
		e=%(authoremail)
		s=%(subject)
		d=%(authordate)
		b=%(body)
	fi
	echo "$kind $T points at a $t object $o"
	if test "z$t" = zcommit
	then
		echo "The commit was authored by $n $e
at $d, and titled

    $s

Its message reads as:
"
		echo "$b" | sed -e "s/^/    /"
		echo
	fi
'

eval=`git for-each-ref --shell --format="$fmt" \
	--sort='*objecttype' \
	--sort=-taggerdate \
	refs/tags`
eval "$eval"

`%(if)…​%(then)…​%(else)…​%(end)` の使用法を示す例。これは現在のブランチに星印を付けます。

git for-each-ref --format="%(if)%(HEAD)%(then)* %(else)  %(end)%(refname:short)" refs/heads/

`%(if)…​%(then)…​%(end)` の使用法を示す例。これは、存在する場合に著者名を出力します。

git for-each-ref --format="%(refname)%(if)%(authorname)%(then) Authored by: %(authorname)%(end)"

注意点

ディスク上のオブジェクトのサイズは正確に報告されますが、どの参照やオブジェクトがディスク使用量に責任があるかについて結論を出す際には注意が必要です。パックされた非デルタオブジェクトのサイズは、それに対してデルタ化されたオブジェクトのサイズよりもはるかに大きい場合がありますが、どのオブジェクトをベースとし、どのオブジェクトをデルタとするかの選択は任意であり、リパック中に変更される可能性があります。

また、オブジェクトの複数のコピーがオブジェクトデータベースに存在する可能性があることにも注意してください。この場合、どのコピーのサイズやデルタベースが報告されるかは未定義です。

備考

複数の `--contains` および `--no-contains` フィルタを組み合わせる場合、少なくとも1つの `--contains` コミットを含み、かつ `--no-contains` コミットを全く含まない参照のみが表示されます。

複数の `--merged` および `--no-merged` フィルタを組み合わせる場合、少なくとも1つの `--merged` コミットから到達可能であり、かつ `--no-merged` コミットからは全く到達不可能な参照のみが表示されます。

関連項目

GIT

git[1] スイートの一部

scroll-to-top