設定と構成
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 2.44.1 → 2.47.0 変更なし
-
2.44.0
02/23/24
- 2.43.1 → 2.43.5 変更なし
-
2.43.0
11/20/23
- 2.42.1 → 2.42.3 変更なし
-
2.42.0
08/21/23
- 2.38.1 → 2.41.2 変更なし
-
2.38.0
10/02/22
- 2.29.1 → 2.37.7 変更なし
-
2.29.0
10/19/20
- 2.25.1 → 2.28.1 変更なし
-
2.25.0
01/13/20
- 2.22.1 → 2.24.4 変更なし
-
2.22.0
06/07/19
- 2.19.1 → 2.21.4 変更なし
-
2.19.0
09/10/18
- 2.17.0 → 2.18.5 変更なし
-
2.16.6
12/06/19
- 2.15.4 変更なし
-
2.14.6
12/06/19
- 2.10.5 → 2.13.7 変更なし
-
2.9.5
07/30/17
-
2.8.6
07/30/17
- 2.7.6 変更なし
-
2.6.7
05/05/17
- 2.4.12 → 2.5.6 変更なし
-
2.3.10
09/28/15
- 2.1.4 → 2.2.3 変更なし
-
2.0.5
12/17/14
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で非テキスト形式のノートを表示しても意味がないため、そのようなノートを使用する場合は、おそらくそれらで役立つことを行うための特別なツールを作成する必要があります。
設定
このセクションのこの行より上のすべては、git-config[1]ドキュメントに含まれていません。以下は、そこにあるものと同じコンテンツです。
- notes.mergeStrategy
-
ノートの競合を解決するときにデフォルトで選択するマージ戦略。
manual
、ours
、theirs
、union
、または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>」オプションを参照)、ターゲットコミットにすでにノートがある場合の処理を決定します。
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]スイートの一部