Git
英語 ▾ トピック ▾ 最新バージョン ▾ 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> …​]

説明

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

オプション

<pattern>…​

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

--stdin

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

--count=<count>

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

--sort=<key>

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

--format=<format>

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

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

--color[=<when>]

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

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

指定されている場合、`%(fieldname)`プレースホルダーを置換する文字列は、指定されたホスト言語に適した文字列リテラルとして引用されます。これは、`eval`できるスクリプトレットを作成することを目的としています。

--points-at=<object>

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

--merged[=<object>]

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

--no-merged[=<object>]

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

--contains[=<object>]

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

--no-contains[=<object>]

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

--ignore-case

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

--omit-empty

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

--exclude=<pattern>

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>`個のパスコンポーネントを残します(例:`%(refname:lstrip=-2)`は`refs/tags/foo`を`tags/foo`に、`%(refname:rstrip=-1)`は`refs/tags/foo`を`refs`に変更します)。参照に十分なコンポーネントがない場合、正の``で削除すると結果は空の文字列になり、負の``で削除すると結果は完全な参照名になります。どちらもエラーではありません。

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

objecttype

オブジェクトの種類(`blob`、`tree`、`commit`、`tag`)。

objectsize

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

objectname

オブジェクト名(別名SHA-1)。オブジェクト名のあいまいではない省略形を追加するには、`:short`を付け加えます。目的の長さのオブジェクト名の省略形を追加するには、`:short=<length>`を付け加えます(最小長はMINIMUM_ABBREV)。一意のオブジェクト名を確保するために、長さは超える可能性があります。

deltabase

これは、指定されたオブジェクトがデルタとして保存されている場合、そのデルタベースのオブジェクト名に展開されます。それ以外の場合は、ヌルオブジェクト名(すべてゼロ)に展開されます。

upstream

表示されている参照の上流と見なせるローカル参照の名前です。上記の`refname`と同様に、`:short`、`:lstrip`、`:rstrip`を尊重します。さらに、`[ahead N, behind M]`を表示する`:track`と、簡潔なバージョン`>`(先頭)、`<`(後方)、`< >`(先頭と後方)、または`=`(同期)を表示する`:trackshort`を尊重します。`unknown`な上流参照が見つかった場合は、`:track`に`[gone]`も出力されます。角かっこなしで追跡情報を表示するには(つまり「ahead N, behind M」)、`:track,nobracket`を付け加えます。

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

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

push

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

HEAD

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

color

出力の色を変更します。`:<colorname>`が続きます。ここで、色名はgit-config[1]の「CONFIGURATION FILE」セクションの値で説明されています。たとえば、`%(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) アトムを使用し、*HEAD* ref にのみ *if* 条件を適用する場合に便利です。値を比較するために `:equals=<string>` または `:notequals=<string>` を追加して、%(if:…​) と %(then) アトムの間の値と指定された文字列を比較します。

symref

指定されたシンボリック ref が参照する ref です。シンボリック ref でない場合、何も出力されません。上記の `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

ref がリンクされたワークツリーでチェックアウトされている場合、そのワークツリーの絶対パス。そうでない場合は空文字列。

ahead-behind:<committish>

スペースで区切られた2つの整数。出力された ref とフォーマットで指定された `<committish>` を比較した場合の先頭と末尾のコミット数を示します。

is-base:<committish>

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

例えば、いくつかの ref の先祖履歴の最初の親を示す次の図を考えてみましょう。

*--*--*--*--*--* 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` の先祖履歴の最初の親が、フィルタリングされた ref の先祖履歴の最初の親と最も早く交差するのが、`B` と `C` の共通の先祖の最初の親であり、タイはソート順で最も早い ref によって解消されるためです。

`<committish>` の先祖履歴の最初の親が、フィルタリングされた ref の先祖履歴の最初の親と交差しない場合、このトークンは表示されません。

describe[:options]

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

tags=<bool-value>

アノテーション付きタグのみを考慮するのではなく、軽量タグも考慮します。git-describe[1] の対応するオプションの詳細を参照してください。

abbrev=<number>

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

match=<pattern>

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

exclude=<pattern>

指定された `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,trim` および ` :mailmap,localpart` を使用できます(順序は問いません)。これにより、.mailmap ファイルに従って、または mailmap.file または mailmap.blob 設定変数で設定されたファイルに従って、名前とメールの値を取得できます(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` を使用して行うことができます。

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

日付型フィールドの特別なケースとして、コロン(`:`)と日付フォーマット名を追加することで、日付のフォーマットを指定できます(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'

出力でシェル評価の使用を示す簡単な例。`--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) の使用方法を示す例。存在する場合、authorname を出力します。

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

注意事項

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

オブジェクトの複数のコピーがオブジェクトデータベースに存在する場合もあります。この場合、どのコピーのサイズまたはデルタベースが報告されるかは未定義です。

備考

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

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

関連コマンド

Git

Git[1]の一部

scroll-to-top