Git
日本語 ▾ トピック ▾ 最新バージョン ▾ git-notes の最終更新は 2.44.0

NAME

git-notes - オブジェクトノートの追加または検査

SYNOPSIS

git notes [list [<object>]]
git notes add [-f] [--allow-empty] [--[no-]separator | --separator=<paragraph-break>] [--[no-]stripspace] [-F <file> | -m <msg> | (-c | -C) <object>] [<object>]
git notes copy [-f] ( --stdin | <from-object> [<to-object>] )
git notes append [--allow-empty] [--[no-]separator | --separator=<paragraph-break>] [--[no-]stripspace] [-F <file> | -m <msg> | (-c | -C) <object>] [<object>]
git notes edit [--allow-empty] [<object>] [--[no-]stripspace]
git notes show [<object>]
git notes merge [-v | -q] [-s <strategy> ] <notes-ref>
git notes merge --commit [-v | -q]
git notes merge --abort [-v | -q]
git notes remove [--ignore-missing] [--stdin] [<object>…​]
git notes prune [-n] [-v]
git notes get-ref

DESCRIPTION

オブジェクト自体を変更せずに、オブジェクトに付加されたノートを追加、削除、または読み取ります。

デフォルトでは、ノートは refs/notes/commits に保存され、そこから読み取られますが、このデフォルトは上書きできます。以下の OPTIONS、CONFIGURATION、および ENVIRONMENT セクションを参照してください。この ref が存在しない場合、ノートを保存するために最初に必要になったときに静かに作成されます。

ノートの典型的な用途は、コミット自体を変更せずにコミットメッセージを補足することです。ノートは、元のコミットメッセージとともに git log で表示できます。これらのノートをコミットオブジェクトに格納されているメッセージと区別するために、ノートは、インデントされていない「Notes (<refname>):」(または refs/notes/commits の場合は「Notes:」)という行の後に、メッセージのようにインデントされます。

--notes オプションを使用すると、git format-patch で作成したパッチにノートを追加することもできます。このようなノートは、3つのダッシュの区切り線の後にパッチコメントとして追加されます。

git log で表示されるノートを変更するには、CONFIGURATION の「notes.displayRef」の議論を参照してください。

コミットを書き換えるコマンド間でノートを伝達する方法については、「notes.rewrite.<command>」構成を参照してください。

SUBCOMMANDS

list

指定されたオブジェクトのノートオブジェクトを一覧表示します。オブジェクトが指定されていない場合は、すべてのノートオブジェクトと、それらが注釈を付けているオブジェクトのリストを表示します(「<note-object> <annotated-object>」形式)。これは、サブコマンドが指定されていない場合のデフォルトのサブコマンドです。

add

指定されたオブジェクト(デフォルトは HEAD)のノートを追加します。オブジェクトにすでにノートがある場合は中止します(既存のノートを上書きするには -f を使用してください)。ただし、add を対話的に使用している場合(エディターを使用してノートの内容を入力する場合)、中止する代わりに、既存のノートがエディターで開きます(edit サブコマンドと同様)。複数の -m および -F を指定すると、メッセージ間に空白行が挿入されます。他の区切り文字を挿入するには、--separator オプションを使用します。

copy

最初のオブジェクトのノートを2番目のオブジェクト(デフォルトは HEAD)にコピーします。2番目のオブジェクトにすでにノートがある場合、または最初のオブジェクトにノートがない場合は中止します(2番目のオブジェクトの既存のノートを上書きするには -f を使用してください)。このサブコマンドは次のコマンドと同等です:git notes add [-f] -C $(git notes list <from-object>) <to-object>

--stdin モードでは、次の形式の行を入力します

<from-object> SP <to-object> [ SP <rest> ] LF

標準入力で、各 <from-object> から対応する <to-object> にノートをコピーします。(オプションの <rest> は無視されるため、コマンドは post-rewrite フックに与えられた入力を読み取ることができます。)

append

オブジェクト(デフォルトは HEAD)の既存のノートに -m または -F オプションで指定された新しいメッセージを追加します。または、ノートが存在しない場合は、新しいノートとして追加します。既存のノートに追加する場合、段落間の区切り文字として、各新しいメッセージの前に空白行が追加されます。区切り文字は --separator オプションでカスタマイズできます。

edit

指定されたオブジェクト(デフォルトは HEAD)のノートを編集します。

show

指定されたオブジェクト(デフォルトは HEAD)のノートを表示します。

merge

指定されたノート ref を現在のノート ref にマージします。これにより、マージベース(存在する場合)以降の指定されたノート ref(「リモート」と呼ばれる)によって行われた変更を、現在のノート ref(「ローカル」と呼ばれる)にマージしようとします。

競合が発生し、競合するノートを自動的に解決するための戦略(「ノートマージ戦略」セクションを参照)が指定されていない場合は、「手動」リゾルバーが使用されます。このリゾルバーは、特別なワークツリー (.git/NOTES_MERGE_WORKTREE) で競合するノートをチェックアウトし、そこで手動で競合を解決するようにユーザーに指示します。完了したら、ユーザーは git notes merge --commit でマージを確定するか、git notes merge --abort でマージを中止することができます。

remove

指定されたオブジェクト(デフォルトは HEAD)のノートを削除します。コマンドラインからゼロ個または1つのオブジェクトを指定する場合、これは edit サブコマンドに空のノートメッセージを指定することと同等です。

prune

存在しない/到達不能なオブジェクトのすべてのノートを削除します。

get-ref

現在のノート ref を出力します。これにより、現在のノート ref を取得する簡単な方法が提供されます(例:スクリプトから)。

OPTIONS

-f
--force

すでにノートを持っているオブジェクトにノートを追加するときに、既存のノートを上書きします(中止する代わりに)。

-m <msg>
--message=<msg>

指定されたノートメッセージを使用します(プロンプトを表示する代わりに)。複数の -m オプションが指定された場合、それらの値は別々の段落として連結されます。# で始まる行と、段落間の単一行以外の空行は削除されます。それらをそのまま保持したい場合は、--no-stripspace を使用してください。

-F <file>
--file=<file>

指定されたファイルからノートメッセージを取得します。標準入力からノートメッセージを読み取るには、- を使用します。# で始まる行と、段落間の単一行以外の空行は削除されます。それらをそのまま保持したい場合は、--no-stripspace を使用してください。

-C <object>
--reuse-message=<object>

指定された blob オブジェクト(たとえば、別のノート)をノートメッセージとして取得します。(オブジェクト間でノートをコピーするには、代わりに git notes copy <object> を使用してください。)デフォルトでは、メッセージはそのままコピーされますが、# で始まる行と、段落間の単一行以外の空行を削除する場合は、`--stripspace` オプションを付けて使用してください。

-c <object>
--reedit-message=<object>

-C と同様ですが、-c を使用するとエディターが起動されるため、ユーザーはノートメッセージをさらに編集できます。

--allow-empty

空のノートオブジェクトの保存を許可します。デフォルトの動作は、空のノートを自動的に削除することです。

--[no-]separator, --separator=<paragraph-break>

カスタムの段落間区切り文字として使用される文字列を指定します(必要に応じて最後に改行が追加されます)。--no-separator の場合、段落間に区切り文字は追加されません。デフォルトは空白行です。

--[no-]stripspace

ノートメッセージから先頭および末尾の空白を削除します。また、段落間の単一行以外の空行も削除します。# で始まる行は、-m-F-C のような非エディターの場合には削除されますが、git notes edit-c のようなエディターの場合には削除されません。

--ref <ref>

<ref> のノートツリーを操作します。これは、GIT_NOTES_REF と「core.notesRef」構成を上書きします。ref は、refs/notes/ で始まる場合は完全な refname を指定します。notes/ で始まる場合は、refs/ がプレフィックスとして付けられ、それ以外の場合は refs/notes/ がプレフィックスとして付けられ、ref の完全な名前が形成されます。

--ignore-missing

ノートが添付されていないオブジェクトからノートを削除する要求をエラーとは見なしません。

--stdin

標準入力からノートを削除するオブジェクト名も読み取ります(コマンドラインからオブジェクト名を組み合わせられない理由はありません)。

-n
--dry-run

何も削除しません。ノートが削除されるオブジェクト名を報告するだけです。

-s <strategy>
--strategy=<strategy>

ノートをマージする際、指定された戦略を使用してノートの競合を解決します。認識される戦略は、「manual」(デフォルト)、「ours」、「theirs」、「union」、「cat_sort_uniq」です。このオプションは、「notes.mergeStrategy」の設定を上書きします。各ノートマージ戦略の詳細については、以下の「ノートマージ戦略」セクションを参照してください。

--commit

進行中のgit notes mergeを完了させます。git notes mergeが.git/NOTES_MERGE_WORKTREEに保存した競合を解決した場合、このオプションを使用します。これにより、git notes mergeによって作成された部分的なマージコミット(.git/NOTES_MERGE_PARTIALに保存)を、.git/NOTES_MERGE_WORKTREEのノートを追加することで修正します。 .git/NOTES_MERGE_REFシンボリック参照に保存されているノート参照が、結果のコミットに更新されます。

--abort

進行中のgit notes merge、つまり競合のあるノートマージを中止/リセットします。これは単にノートマージに関連するすべてのファイルを削除します。

-q
--quiet

ノートをマージするとき、静かに操作します。

-v
--verbose

ノートをマージするとき、より詳細な情報を表示します。ノートを削除するとき、ノートが削除されるすべてのオブジェクト名を報告します。

ディスカッション

コミットノートは、オブジェクトに関する追加情報(通常はコミットのメッセージを補足する情報)を含むブロブです。これらのブロブは、ノート参照から取得されます。ノート参照は通常、オブジェクトを記述するオブジェクト名のパスを持つ「ファイル」を含むブランチであり、パフォーマンス上の理由からいくつかのディレクトリ区切り文字が含まれています [1]

すべてのノートの変更は、指定されたノート参照で新しいコミットを作成します。したがって、例えばgit log -p notes/commitsを呼び出すことで、ノートの履歴を調べることができます。現在、コミットメッセージは更新をトリガーした操作のみを記録し、コミットの作成者は通常のルールに従って決定されます(git-commit[1]を参照)。これらの詳細は将来変更される可能性があります。

ノート参照が直接ツリーオブジェクトを指すことも許可されており、その場合、ノートの履歴はgit log -p -g <refname>で読み取ることができます。

ノートマージ戦略

デフォルトのノートマージ戦略は「manual」であり、ノートの競合を解決するために特別なワークツリー(.git/NOTES_MERGE_WORKTREE)に競合するノートをチェックアウトし、ユーザーにそのワークツリーで競合を解決するように指示します。完了したら、ユーザーはgit notes merge --commitでマージを完了するか、git notes merge --abortでマージを中止できます。

ユーザーは、-s/--strategyオプションを使用するか、notes.mergeStrategyを構成することで、次の自動マージ戦略から選択できます。

「ours」は、競合するノートをローカルバージョン(つまり、現在のノート参照)を優先して自動的に解決します。

「theirs」は、競合するノートをリモートバージョン(つまり、現在のノート参照にマージされる指定されたノート参照)を優先して自動的に解決します。

「union」は、ローカルバージョンとリモートバージョンを連結することで、競合するノートを自動的に解決します。

「cat_sort_uniq」は「union」に似ていますが、ローカルバージョンとリモートバージョンを連結することに加えて、この戦略は結果の行をソートし、結果から重複する行を削除します。これは、「cat | sort | uniq」シェルパイプラインをローカルバージョンとリモートバージョンに適用することと同等です。この戦略は、ノートが行ベースの形式に従っており、マージ結果で重複する行を避けたい場合に役立ちます。マージ前にローカルバージョンまたはリモートバージョンのいずれかに重複する行が含まれている場合、これらもこのノートマージ戦略によって削除されることに注意してください。

ノートを使用して、コミットが作成された時点では利用できなかった情報で注釈を追加できます。

$ git notes add -m 'Tested-by: Johannes Sixt <j6t@kdbg.org>' 72a144e2
$ git show -s 72a144e
[...]
    Signed-off-by: Junio C Hamano <gitster@pobox.com>

Notes:
    Tested-by: Johannes Sixt <j6t@kdbg.org>

原則として、ノートは通常のGitブロブであり、どのような(非)形式でも受け入れられます。git hash-objectを使用して、任意のファイルからバイナリセーフにノートを作成できます。

$ cc *.c
$ blob=$(git hash-object -w a.out)
$ git notes --ref=built add --allow-empty -C "$blob" HEAD

(これはバイナリセーフではないため、git notes --ref=built add -F a.out HEADを単純に使用することはできません。)もちろん、git logで非テキスト形式のノートを表示しても意味がないため、そのようなノートを使用する場合は、おそらくそれらで役立つことを行うための特別なツールを作成する必要があります。

設定

core.notesRef

refs/notes/commitsの代わりに読み書きするノート参照。省略されていない参照名である必要があります。この設定は、環境変数とコマンドラインを通じて上書きできます。

このセクションのこの行より上のすべては、git-config[1]ドキュメントに含まれていません。以下は、そこにあるものと同じコンテンツです。

notes.mergeStrategy

ノートの競合を解決するときにデフォルトで選択するマージ戦略。manualourstheirsunion、またはcat_sort_uniqのいずれかである必要があります。デフォルトはmanualです。各戦略の詳細については、git-notes[1]の「ノートマージ戦略」セクションを参照してください。

この設定は、git-notes[1]--strategyオプションを渡すことで上書きできます。

notes.<name>.mergeStrategy

refs/notes/<name>にノートマージを行うときに選択するマージ戦略。これは、より一般的な「notes.mergeStrategy」を上書きします。利用可能な戦略の詳細については、git-notes[1]の「ノートマージ戦略」セクションを参照してください。

notes.displayRef

git logファミリのコマンドでコミットメッセージを表示するときに、core.notesRefまたはGIT_NOTES_REFで設定されたデフォルトのセットに加えて、ノートを読み込む参照(または、グロブである場合、または複数回指定された場合は複数の参照)。

この設定は、環境変数GIT_NOTES_DISPLAY_REFで上書きできます。これは、参照またはグロブのコロン区切りのリストである必要があります。

存在しない参照に対しては警告が発行されますが、どの参照にも一致しないグロブは暗黙的に無視されます。

この設定は、git logファミリのコマンドへの--no-notesオプション、またはそれらのコマンドで受け入れられる--notes=<ref>オプションによって無効にできます。

「core.notesRef」(おそらくGIT_NOTES_REFによって上書きされる)の有効値も、表示される参照のリストに暗黙的に追加されます。

notes.rewrite.<command>

<command>(現在はamendまたはrebase)でコミットを書き換えるとき、この変数がfalseの場合、gitは元のコミットから書き換えられたコミットにノートをコピーしません。デフォルトはtrueです。以下の「notes.rewriteRef」も参照してください。

この設定は、環境変数GIT_NOTES_REWRITE_REFで上書きできます。これは、参照またはグロブのコロン区切りのリストである必要があります。

notes.rewriteMode

書き換え中にノートをコピーするとき(「notes.rewrite.<command>」オプションを参照)、ターゲットコミットにすでにノートがある場合の処理を決定します。overwriteconcatenatecat_sort_uniq、またはignoreのいずれかである必要があります。デフォルトはconcatenateです。

この設定は、環境変数GIT_NOTES_REWRITE_MODEで上書きできます。

notes.rewriteRef

書き換え中にノートをコピーするとき、コピーするノートの(完全修飾された)参照を指定します。グロブの場合もあり、その場合、一致するすべての参照のノートがコピーされます。この構成を複数回指定することもできます。

デフォルト値はありません。ノートの書き換えを有効にするには、この変数を構成する必要があります。デフォルトのコミットノートの書き換えを有効にするには、refs/notes/commitsに設定します。

GIT_NOTES_REWRITE_REF環境変数で上書きできます。その形式の詳細については、上記のnotes.rewrite.<command>を参照してください。

環境

GIT_NOTES_REF

refs/notes/commitsの代わりにノートを操作する参照。これは、core.notesRef設定を上書きします。

GIT_NOTES_DISPLAY_REF

コミットメッセージを表示するときに、core.notesRefまたはGIT_NOTES_REFからのデフォルトに加えて、ノートを読み込む参照を示す、参照またはグロブのコロン区切りリスト。これは、notes.displayRef設定を上書きします。

存在しない参照に対しては警告が発行されますが、どの参照にも一致しないグロブは暗黙的に無視されます。

GIT_NOTES_REWRITE_MODE

書き換え中にノートをコピーするときに、ターゲットコミットにすでにノートがある場合にどうするか。overwriteconcatenatecat_sort_uniq、またはignoreのいずれかである必要があります。これは、core.rewriteMode設定を上書きします。

GIT_NOTES_REWRITE_REF

コミットを書き換えるときに、元のコミットから書き換えられたコミットにコピーするノート。参照またはグロブのコロン区切りリストである必要があります。

環境で設定されていない場合、コピーするノートのリストは、notes.rewrite.<command>およびnotes.rewriteRef設定によって異なります。

GIT

git[1]スイートの一部


1.許可されるパス名は、bf/fe/30/…​/680d5a…​の形式です。それぞれ2桁の16進数のディレクトリ名のシーケンスに、オブジェクトIDの残りの部分を持つファイル名が続きます。
scroll-to-top