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

名前

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

概要

git notes [list [<object>]] git notes add [-f] [--allow-empty] [--[no-]separator | --separator=<paragraph-break>] [--[no-]stripspace] [-F <file> | -m <msg> | (-c | -C) <object>] [-e] [<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>] [-e] [<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

説明

オブジェクト自体に触れることなく、オブジェクトに付加されたノートを追加、削除、または読み取ります。

デフォルトでは、ノートは `refs/notes/commits` に保存および読み込まれますが、このデフォルトは上書きできます。詳細については、以下の OPTIONS、CONFIGURATION、および ENVIRONMENT セクションを参照してください。この参照が存在しない場合、ノートを最初に保存する必要があるときに自動的に作成されます。

ノートの一般的な用途は、コミット自体を変更することなく、コミットメッセージを補足することです。ノートは `git log` で元のコミットメッセージとともに表示できます。これらのノートをコミットオブジェクトに保存されているメッセージと区別するために、ノートはメッセージと同様にインデントされ、その前にインデントされていない行で「Notes (*<refname>*):」(または `refs/notes/commits` の場合は「Notes:」)と表示されます。

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

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

コミットを書き換えるコマンド間でノートを引き継ぐ方法については、`notes.rewrite.<command>` 設定を参照してください。

サブコマンド

`list`

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

`add`

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

`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`

`-m` または `-F` オプションで与えられた新しいメッセージを既存のノートに追加するか、存在しない場合は新しいノートとしてオブジェクトに (デフォルトは `HEAD`) 追加します。既存のノートに追記する場合、新しい各メッセージの前に空白行が段落間の区切り文字として追加されます。区切り文字は `--separator` オプションでカスタマイズできます。ノートを追記する前に、`-m` および `-F` オプションで与えられた追記するノートを `-e` で対話的に (エディタを使用して) 編集します。

`edit`

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

`show`

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

`merge`

指定されたノート参照を現在のノート参照にマージします。これは、指定されたノート参照 (「リモート」と呼ばれる) によってマージベース (もしあれば) から行われた変更を、現在のノート参照 (「ローカル」と呼ばれる) にマージしようとします。

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

`remove`

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

`prune`

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

`get-ref`

現在のノート参照を表示します。これは、現在のノート参照 (スクリプトなどから) を簡単に取得する方法を提供します。

オプション

`f`
`--force`

既にノートがあるオブジェクトにノートを追加する際、既存のノートを上書きします (中止する代わりに)。

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

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

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

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

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

指定されたブロブオブジェクト (例えば、別のノート) をノートメッセージとして使用します。(オブジェクト間でノートをコピーするには、代わりに `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` 設定を上書きします。`refs/notes/` で始まる場合、参照は完全な参照名として指定されます。`notes/` で始まる場合は `refs/` が、それ以外の場合は `refs/notes/` がプレフィックスとして付加され、参照の完全な名前が形成されます。

`--ignore-missing`

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

`--stdin`

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

`n`
`--dry-run`

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

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

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

`--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`

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

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

`notes.<name>.mergeStrategy`

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

`notes.displayRef`

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

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

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

この設定は、git-log[1] ファミリーのコマンドに対する `--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>` オプション」を参照)、対象コミットにすでにノートがある場合にどうするかを決定します。`overwrite`、`concatenate`、`cat_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`

書き換え中にノートをコピーする際、対象コミットにすでにノートがある場合にどうするか。`overwrite`、`concatenate`、`cat_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