日本語 ▾ トピック ▾ 最新バージョン ▾ git-for-each-ref は 2.50.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> 内の補間された値は、指定されたホスト言語で文字列リテラルとして引用することもでき、その言語での直接評価を可能にします。

オプション

<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> フィールドは alwaysnever、または 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

フォーマットが空文字列に展開されるフォーマットされた ref の後に改行を出力しません。

--exclude=<pattern>

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

--include-root-refs

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

フィールド名

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

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

refname

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

striplstrip の同義語として使用できます。

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 と、簡潔なバージョン: ">" (ahead), "<" (behind), "<>" (ahead and behind), または "=" (同期済み) を表示する :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) アトムを使用し、HEAD 参照にのみ if 条件を適用したい場合に便利です。%(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>

出力参照とフォーマットで指定された <committish> を比較した場合の、それぞれ先行コミット数と遅延コミット数を表す2つの整数 (スペース区切り)。

is-base:<committish>

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

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

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

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

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

これは、D の第一親履歴が、フィルタリングされた参照の第一親履歴と最も早く交差するのが BC の共通の第一親祖先であり、タイはソート順で最も早い参照によって解決されるためです。

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

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>

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

上記に加えて、コミットおよびタグオブジェクトの場合、ヘッダーフィールド名 (treeparentobjecttype、および 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 を使用して行えます。

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

日付型フィールドの特殊なケースとして、日付の後に : と日付フォーマット名を追加することでフォーマットを指定できます (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 の使用法を示す、出力でのシェル eval の使用を示す簡単な例。すべてのヘッドのプレフィックスをリストアップする。

#!/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 フィルターを組み合わせる場合、--contains コミットの少なくとも1つを含み、--no-contains コミットのいずれも含まない参照のみが表示されます。

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

関連項目

GIT

git[1]スイートの一部

scroll-to-top