セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ
デバッグ
メール
外部システム
サーバー管理
ガイド
- gitattributes
- コマンドラインインターフェースの規則
- 日々のGit
- よくある質問 (FAQ)
- 用語集
- フック
- gitignore
- gitmodules
- リビジョン
- サブモジュール
- チュートリアル
- ワークフロー
- すべてのガイド...
管理
低レベルコマンド
- 2.45.1 → 2.47.0 変更なし
-
2.45.0
04/29/24
- 2.43.1 → 2.44.2 変更なし
-
2.43.0
11/20/23
- 2.42.1 → 2.42.3 変更なし
-
2.42.0
08/21/23
- 2.41.1 → 2.41.2 変更なし
-
2.41.0
06/01/23
- 2.39.1 → 2.40.3 変更なし
-
2.39.0
12/12/22
- 2.38.1 → 2.38.5 変更なし
-
2.38.0
10/02/22
- 2.32.1 → 2.37.7 変更なし
-
2.32.0
06/06/21
- 2.22.1 → 2.31.8 変更なし
-
2.22.0
06/07/19
- 2.19.3 → 2.21.4 変更なし
-
2.19.2
11/21/18
- 2.19.1 変更なし
-
2.19.0
09/10/18
- 2.18.1 → 2.18.5 変更なし
-
2.18.0
06/21/18
- 2.17.0 → 2.17.6 変更なし
-
2.16.6
12/06/19
-
2.15.4
12/06/19
- 2.14.6 変更なし
-
2.13.7
05/22/18
- 2.12.5 変更なし
-
2.11.4
09/22/17
- 2.10.5 変更なし
-
2.9.5
07/30/17
-
2.8.6
07/30/17
- 2.7.6 変更なし
-
2.6.7
05/05/17
- 2.3.10 → 2.5.6 変更なし
-
2.2.3
09/04/15
概要
git interpret-trailers [--in-place] [--trim-empty] [(--trailer (<key>|<key-alias>)[(=|:)<value>])…] [--parse] [<file>…]
説明
RFC 822 電子メールヘッダーに似た _トレーラー_ 行を、コミットメッセージの自由形式の部分の最後に追加または解析します。たとえば、次のコミットメッセージでは
subject Lorem ipsum dolor sit amet, consectetur adipiscing elit. Signed-off-by: Alice <alice@example.com> Signed-off-by: Bob <bob@example.com>
"Signed-off-by" で始まる最後の2行はトレーラーです。
このコマンドは、<file> 引数から、または <file> が指定されていない場合は標準入力からコミットメッセージを読み取ります。 --parse
が指定されている場合、出力は入力から来る解析されたトレーラーで構成され、コマンドラインオプションまたは設定変数による影響を受けません.
それ以外の場合、このコマンドは trailer.*
設定変数 (新しいトレーラーを追加したり、位置を変更したりする可能性があります) と、設定変数をオーバーライドできるコマンドライン引数 (新しいトレーラーを追加できる --trailer=...
など) を各入力ファイルに適用します。結果は標準出力に出力されます。
このコマンドは、プレーンなコミットメッセージよりも精巧な git-format-patch[1] の出力に対しても操作できます。つまり、そのような出力には、コミットメッセージ (上記のように)、「---」区切り線、およびパッチ部分が含まれます。これらの入力の場合、区切り線とパッチ部分は、--no-divider
が指定されていない限り、このコマンドによって変更されず、出力にそのまま出力されます。
一部の設定変数は、--trailer
引数が各入力に適用される方法と、入力に既存のトレーラーがある場合に変更される方法を制御します。また、一部のトレーラーを自動的に追加することもできます。
デフォルトでは、--trailer
を使用して指定された _<key>=<value>_ または _<key>:<value>_ 引数は、最後のトレーラーに異なる (<key>, <value>) ペアがある場合 (または既存のトレーラーがない場合) にのみ、既存のトレーラーの後に追加されます。 <key> と <value> の部分は、先頭と末尾の空白を削除するためにトリミングされ、結果のトリミングされた <key> と <value> は次のように出力に表示されます
key: value
これは、トリミングされた <key> と <value> が ': '
(コロン1つとスペース1つ) で区切られることを意味します。
便宜上、<key-alias> を設定して、コマンドラインで --trailer
の入力を短縮できます。これは _trailer.<key-alias>.key_ 設定変数を使用して設定できます。 <keyAlias> は、大文字と小文字の区別は関係ありませんが、完全な <key> 文字列のプレフィックスである必要があります。たとえば、設定に
trailer.sign.key "Signed-off-by: "
がある場合、コマンドラインで --trailer="Signed-off-by: foo"
の代わりに --trailer="sign: foo"
を指定するだけで済みます。
デフォルトでは、新しいトレーラーはすべての既存のトレーラーの最後に表示されます。既存のトレーラーがない場合、新しいトレーラーは入力の最後に表示されます。まだ空行がない場合は、新しいトレーラーの前に空行が追加されます。
既存のトレーラーは、(i) すべてトレーラーである、または (ii) 少なくとも1つのGitによって生成されたまたはユーザー設定のトレーラーを含み、少なくとも25%のトレーラーで構成される、1つ以上の行のグループを探すことによって入力から抽出されます。グループの前に1つ以上の空行 (または空白のみの行) が必要です。グループは入力の最後にあるか、_---_ (スペースまたは行末が続く) で始まる行の前の最後の非空白行である必要があります。
トレーラーを読み取るとき、<key> の前または内側に空白を含めることはできませんが、<key> と区切り文字の間に任意の数の通常のスペースとタブ文字を使用できます。 <value> の前、内側、または後には空白を含めることができます。 <value> は、RFC 822 の「折りたたみ」のように、後続の各行が少なくとも1つの空白で始まる複数の行に分割できます。例:
key: This is a very long value, with spaces and newlines in it.
トレーラーは、RFC 822 ヘッダーの多くのルールに従っていない (または従うことを意図していない) ことに注意してください。たとえば、エンコーディングルールには従いません。
オプション
- --in-place
-
ファイルをその場で編集します。
- --trim-empty
-
トレーラーの <value> 部分に空白のみが含まれている場合、トレーラー全体が出力から削除されます。これは、既存のトレーラーと新しいトレーラーの両方に適用されます。
- --trailer <key>[(=|:)<value>]
-
入力にトレーラーとして適用する必要がある (<key>, <value>) ペアを指定します。このコマンドの説明を参照してください。
- --where <placement>
- --no-where
-
すべての新しいトレーラーを追加する場所を指定します。 _--where_ で指定された設定は、 `trailer.where` および該当する `trailer.<keyAlias>.where` 設定変数をオーバーライドし、 _--where_ または _--no-where_ が次に発生するまで、すべての _--trailer_ オプションに適用されます。 _--no-where_ に遭遇したら、 _--where_ の以前の使用による影響をクリアして、関連する設定変数がオーバーライドされなくなります。可能な配置は、 `after`、 `before`、 `end`、または `start` です。
- --if-exists <action>
- --no-if-exists
-
入力に同じ <key> を持つトレーラーが既に1つ以上ある場合に実行されるアクションを指定します。 _--if-exists_ で指定された設定は、 `trailer.ifExists` および該当する `trailer.<keyAlias>.ifExists` 設定変数をオーバーライドし、 _--if-exists_ または _--no-if-exists_ が次に発生するまで、すべての _--trailer_ オプションに適用されます。 '--no-if-exists に遭遇したら、 '--if-exists の以前の使用による影響をクリアして、関連する設定変数がオーバーライドされなくなります。可能なアクションは、 `addIfDifferent`、 `addIfDifferentNeighbor`、 `add`、 `replace`、および `doNothing` です。
- --if-missing <action>
- --no-if-missing
-
入力に同じ <key> を持つ他のトレーラーがない場合に実行されるアクションを指定します。 _--if-missing_ で指定された設定は、 `trailer.ifMissing` および該当する `trailer.<keyAlias>.ifMissing` 設定変数をオーバーライドし、 _--if-missing_ または _--no-if-missing_ が次に発生するまで、すべての _--trailer_ オプションに適用されます。 '--no-if-missing に遭遇したら、 '--if-missing の以前の使用による影響をクリアして、関連する設定変数がオーバーライドされなくなります。可能なアクションは、 `doNothing` または `add` です。
- --only-trailers
-
入力の他の部分ではなく、トレーラーのみを出力します。
- --only-input
-
入力に存在するトレーラーのみを出力します。コマンドラインから、または `trailer.*` 設定変数を適用することによって、トレーラーを追加しないでください。
- --unfold
-
トレーラーの値が複数行にわたる場合 (別名「折りたたみ」)、値を1行に再フォーマットします。
- --parse
-
--only-trailers --only-input --unfold
の便利なエイリアスです。これにより、コマンドラインオプションまたは設定変数で影響を与えることなく、入力からのトレーラーのみを簡単に確認でき、 `--unfold` で出力を機械可読にすることもできます。 - --no-divider
-
---
をコミットメッセージの終わりとして扱わないでください。入力にコミットメッセージ自体のみが含まれている (メールまたは `git format-patch` の出力ではない) ことがわかっている場合に、これを使用します。
設定変数
- trailer.separators
-
このオプションは、どの文字がトレーラー区切り文字として認識されるかを指定します。デフォルトでは、_:_ のみがトレーラー区切り文字として認識されます。ただし、他のgitコマンドとの互換性のために、コマンドラインでは _=_ は常に受け入れられます。
このオプションで指定された最初の文字は、このトレーラーの設定で別の区切り文字が指定されていない場合に使用されるデフォルトの文字になります。
例えば、このオプションの値が "%=$" の場合、<key><sep><value> の形式で、<sep> に %、=、または $ が含まれ、その後にスペースがある行のみがトレーラーと見なされます。そして、% がデフォルトで使用される区切り文字となるため、デフォルトではトレーラーは <key>% <value> のように表示されます(キーと値の間にパーセント記号1つとスペース1つが表示されます)。
- trailer.where
-
このオプションは、新しいトレーラーを追加する場所を指定します。
これは、デフォルトの
end
、start
、after
、またはbefore
を指定できます。end
の場合、新しいトレーラーは既存のトレーラーの末尾に追加されます。start
の場合、新しいトレーラーは既存のトレーラーの末尾ではなく、先頭に追加されます。after
の場合、新しいトレーラーは同じ <key> を持つ最後のトレーラーの直後に追加されます。before
の場合、新しいトレーラーは同じ <key> を持つ最初のトレーラーの直前に追加されます。 - trailer.ifexists
-
このオプションは、入力に同じ <key> を持つトレーラーが既に1つ以上存在する場合に実行されるアクションを選択できるようにします。
このオプションの有効な値は、
addIfDifferentNeighbor
(デフォルト)、addIfDifferent
、add
、replace
、またはdoNothing
です。addIfDifferentNeighbor
を使用すると、新しいトレーラーが追加される行の上または下に、同じ (<key>, <value>) のペアを持つトレーラーがない場合にのみ、新しいトレーラーが追加されます。addIfDifferent
を使用すると、入力に同じ (<key>, <value>) のペアを持つトレーラーがまだない場合にのみ、新しいトレーラーが追加されます。add
を使用すると、同じ (<key>, <value>) のペアを持つトレーラーが入力に既に存在する場合でも、新しいトレーラーが追加されます。replace
を使用すると、同じ <key> を持つ既存のトレーラーが削除され、新しいトレーラーが追加されます。削除されるトレーラーは、新しいトレーラーが追加される場所に最も近い(同じ <key> を持つ)トレーラーです。doNothing
を使用すると、何も実行されません。つまり、入力に同じ <key> を持つトレーラーが既に存在する場合、新しいトレーラーは追加されません。 - trailer.ifmissing
-
このオプションを使用すると、入力に同じ <key> を持つトレーラーがまだ存在しない場合に実行されるアクションを選択できます。
このオプションの有効な値は、
add
(デフォルト)とdoNothing
です。add
を使用すると、新しいトレーラーが追加されます。doNothing
を使用すると、何も実行されません。 - trailer.<keyAlias>.key
-
<key> の <keyAlias> を定義します。 <keyAlias> は <key> のプレフィックスである必要があります(大文字と小文字は区別されません)。たとえば、
git config trailer.ack.key "Acked-by"
では、「Acked-by」が <key> で、「ack」が <keyAlias> です。この設定により、長い--trailer "Acked-by:..."
の代わりに、「ack」<keyAlias> を使用した短い--trailer "ack:..."
呼び出しをコマンドラインで使用できます。<key> の末尾に区切り文字とスペース文字を指定できます。デフォルトでは、有効な区切り文字は : のみですが、これは
trailer.separators
設定変数を使用して変更できます。キーに区切り文字がある場合、トレーラーを追加するときにデフォルトの区切り文字がオーバーライドされます。
- trailer.<keyAlias>.where
-
このオプションは、_trailer.where_ 設定変数と同じ値を受け取り、指定された <keyAlias> を持つトレーラーに対してそのオプションで指定された内容をオーバーライドします。
- trailer.<keyAlias>.ifexists
-
このオプションは、_trailer.ifexists_ 設定変数と同じ値を受け取り、指定された <keyAlias> を持つトレーラーに対してそのオプションで指定された内容をオーバーライドします。
- trailer.<keyAlias>.ifmissing
-
このオプションは、_trailer.ifmissing_ 設定変数と同じ値を受け取り、指定された <keyAlias> を持つトレーラーに対してそのオプションで指定された内容をオーバーライドします。
- trailer.<keyAlias>.command
-
_trailer.<keyAlias>.cmd_ が推奨されるため、非推奨となりました。 このオプションは _trailer.<keyAlias>.cmd_ と同じように動作しますが、指定されたコマンドに引数として何も渡しません。代わりに、部分文字列 $ARG の最初の出現箇所が、引数として渡される <value> に置き換えられます。
ユーザーのコマンドの $ARG は一度だけ置き換えられ、元の $ARG の置き換え方法は安全ではないことに注意してください。
同じ <keyAlias> に対して _trailer.<keyAlias>.cmd_ と _trailer.<keyAlias>.command_ の両方が指定されている場合、_trailer.<keyAlias>.cmd_ が使用され、_trailer.<keyAlias>.command_ は無視されます。
- trailer.<keyAlias>.cmd
-
このオプションを使用して、指定された <keyAlias> を持つトレーラーを自動的に追加するために一度だけ呼び出されるシェルコマンドを指定し、次に _--trailer <keyAlias>=<value>_ 引数が指定されるたびに呼び出して、このオプションが生成するトレーラーの <value> を変更できます。
指定されたコマンドが、指定された <keyAlias> を持つトレーラーを追加するために最初に呼び出されたとき、特別な _--trailer <keyAlias>=<value>_ 引数が "git interpret-trailers" コマンドの先頭に追加されたように動作します。ここで、<value> は、コマンドの標準出力から先頭と末尾の空白が削除されたものとみなされます。
いくつかの _--trailer <keyAlias>=<value>_ 引数もコマンドラインで渡された場合、コマンドはこれらの引数のそれぞれについて、同じ <keyAlias> を使用してもう一度呼び出されます。そして、これらの引数の <value> 部分(もしあれば)は、コマンドの最初の引数として渡されます。このようにして、コマンドは _--trailer <keyAlias>=<value>_ 引数で渡された <value> から計算された <value> を生成できます。
例
-
_Signed-off-by_ キーを持つ _sign_ トレーラーを設定し、これらのトレーラーを2つコミットメッセージファイルに追加します
$ git config trailer.sign.key "Signed-off-by" $ cat msg.txt subject body text $ git interpret-trailers --trailer 'sign: Alice <alice@example.com>' --trailer 'sign: Bob <bob@example.com>' <msg.txt subject body text Signed-off-by: Alice <alice@example.com> Signed-off-by: Bob <bob@example.com>
-
コミットメッセージファイルをその場で編集するには、`--in-place` オプションを使用します
$ cat msg.txt subject body text Signed-off-by: Bob <bob@example.com> $ git interpret-trailers --trailer 'Acked-by: Alice <alice@example.com>' --in-place msg.txt $ cat msg.txt subject body text Signed-off-by: Bob <bob@example.com> Acked-by: Alice <alice@example.com>
-
最後のコミットをパッチとして抽出し、_Cc_ と _Reviewed-by_ トレーラーを追加します
$ git format-patch -1 0001-foo.patch $ git interpret-trailers --trailer 'Cc: Alice <alice@example.com>' --trailer 'Reviewed-by: Bob <bob@example.com>' 0001-foo.patch >0001-bar.patch
-
'Signed-off-by: ' がまだない場合にのみ、作者情報を含む 'Signed-off-by: ' を自動的に追加するコマンドを使用して _sign_ トレーラーを設定し、その動作を示します
$ cat msg1.txt subject body text $ git config trailer.sign.key "Signed-off-by: " $ git config trailer.sign.ifmissing add $ git config trailer.sign.ifexists doNothing $ git config trailer.sign.cmd 'echo "$(git config user.name) <$(git config user.email)>"' $ git interpret-trailers --trailer sign <msg1.txt subject body text Signed-off-by: Bob <bob@example.com> $ cat msg2.txt subject body text Signed-off-by: Alice <alice@example.com> $ git interpret-trailers --trailer sign <msg2.txt subject body text Signed-off-by: Alice <alice@example.com>
-
この文字の後にスペースがない _#_ を含むキーを使用して _fix_ トレーラーを設定し、その動作を示します
$ git config trailer.separators ":#" $ git config trailer.fix.key "Fix #" $ echo "subject" | git interpret-trailers --trailer fix=42 subject Fix #42
-
gitリポジトリのgitログから指定された作者IDを検索するスクリプト `glog-find-author` を使用するcmdで _help_ トレーラーを設定し、その動作を示します
$ cat ~/bin/glog-find-author #!/bin/sh test -n "$1" && git log --author="$1" --pretty="%an <%ae>" -1 || true $ cat msg.txt subject body text $ git config trailer.help.key "Helped-by: " $ git config trailer.help.ifExists "addIfDifferentNeighbor" $ git config trailer.help.cmd "~/bin/glog-find-author" $ git interpret-trailers --trailer="help:Junio" --trailer="help:Couder" <msg.txt subject body text Helped-by: Junio C Hamano <gitster@pobox.com> Helped-by: Christian Couder <christian.couder@gmail.com>
-
gitリポジトリのgitログから最後の関連コミットをgrepするスクリプト `glog-grep` を使用するcmdで _ref_ トレーラーを設定し、その動作を示します
$ cat ~/bin/glog-grep #!/bin/sh test -n "$1" && git log --grep "$1" --pretty=reference -1 || true $ cat msg.txt subject body text $ git config trailer.ref.key "Reference-to: " $ git config trailer.ref.ifExists "replace" $ git config trailer.ref.cmd "~/bin/glog-grep" $ git interpret-trailers --trailer="ref:Add copyright notices." <msg.txt subject body text Reference-to: 8bc9a0c769 (Add copyright notices., 2005-04-07)
-
関連するコミットの件名を表示するコマンドを使用して _see_ トレーラーを設定し、その動作を示します
$ cat msg.txt subject body text see: HEAD~2 $ cat ~/bin/glog-ref #!/bin/sh git log -1 --oneline --format="%h (%s)" --abbrev-commit --abbrev=14 $ git config trailer.see.key "See-also: " $ git config trailer.see.ifExists "replace" $ git config trailer.see.ifMissing "doNothing" $ git config trailer.see.cmd "glog-ref" $ git interpret-trailers --trailer=see <msg.txt subject body text See-also: fe3187489d69c4 (subject of related commit)
-
空の値を持つトレーラーをいくつか含むコミットテンプレートを設定し(sedを使用してトレーラーの末尾のスペースを表示して保持します)、次に _git interpret-trailers_ を使用して空の値を持つトレーラーを削除し、_git-version_ トレーラーを追加するcommit-msgフックを設定します
$ cat temp.txt ***subject*** ***message*** Fixes: Z Cc: Z Reviewed-by: Z Signed-off-by: Z $ sed -e 's/ Z$/ /' temp.txt > commit_template.txt $ git config commit.template commit_template.txt $ cat .git/hooks/commit-msg #!/bin/sh git interpret-trailers --trim-empty --trailer "git-version: \$(git describe)" "\$1" > "\$1.new" mv "\$1.new" "\$1" $ chmod +x .git/hooks/commit-msg
GIT
git[1] スイートの一部