SYNOPSIS

git commit-tree <tree> [(-p <parent>)…]
git commit-tree [(-p <parent>)…] [-S[<keyid>]] [(-m <message>)…]
                  [(-F <file>)…] <tree>

DESCRIPTION

これは通常、エンドユーザーが直接実行するものではありません。代わりに git-commit(1) を参照してください。

提供されたツリーオブジェクトに基づいて新しいコミットオブジェクトを作成し、標準出力に新しいコミットオブジェクトIDを発行します。 -m または -F オプションが指定されていない限り、ログメッセージは標準入力から読み取られます。

-m および -F オプションは、任意の回数、任意の順序で指定できます。コミットログメッセージは、オプションが指定された順序で作成されます。

コミットオブジェクトには、任意の数の親を含めることができます。親が1つだけの場合、これは通常のコミットです。 複数の親を持つことで、コミットは複数の履歴行の間でマージされます。なお、最初のコミット(ルートコミット)には親はありません。

ツリーは作業ディレクトリの特定のディレクトリ状態を表しますが、コミットはある「時点」における状態を表し、そこに到達する方法を説明します。

あなたがその状態に関するメモをは何処に保存してもGitは気にしませんが、通常、コミットは新しい「HEAD」状態を識別します。実際のところGitは、.git/HEAD が指すファイルに結果を書き込む傾向にあり、最後にコミットされた状態が何であったかを常に確認できるようにしています。

OPTIONS

<tree>

既存のツリーオブジェクト。

-p <parent>

-p は、親コミットオブジェクトのIDを示します。

-m <message>

コミットログメッセージの段落。これは複数回指定でき、各 <message> は独立した段落になります。

-F <file>

指定されたファイルからコミットログメッセージを読み取ります。 標準入力から読み取るには、 - を使用します。 これは複数回指定でき、各ファイルの内容は独自した段落になります。

-S[<keyid>]
--gpg-sign[=<keyid>]
--no-gpg-sign

GPG署名コミット。 keyid 引数はオプションで、デフォルトはコミッターIDです。指定する場合は、スペースなしでオプションに指定する必要があります。 --no-gpg-sign は、コマンドラインで前に指定した --gpg-sign オプションを無効にするのに役立ちます。

Commit Information

コミットをカプセル化します:

  • 全ての親のオブジェクトID

  • 作者名と電子メールアドレスと日付

  • コミッター名とコミッター電子メールアドレスとコミット日付

コミットコメントは標準入力から読み取られます。変更ログエントリが "<" リダイレクトを介して提供されない場合、「git commit-tree」は、変更ログエントリがターミナルから入力されて ^D で終了するのを待つだけです。

DATE FORMATS

GIT_AUTHOR_DATEGIT_COMMITTER_DATE 環境変数は、以下の日付形式をサポートします:

Git internal format

これは <unix-timestamp> <time-zone-offset> ここで、 <unix-timestamp> UNIXエポックからの秒数です。 <time-zone-offset> はUTCからの正または負のオフセットです。 たとえば、CET(UTCより1時間進んでいます)は +0100 です。

RFC 2822

RFC 2822で説明されている標準の電子メール形式。たとえば、 Thu, 07 Apr 2005 22:13:13 +0200

ISO 8601

ISO 8601規格で指定されている日時(例: 2005-04-07T22:13:13)。パーサは、 T 文字の代わりにスペースも受け入れます。秒の小数部分は無視されます。たとえば、 2005-04-07T22:13:13.0192005-04-07T22:13:13 として扱われます。

Note
日付部分は、上記に加えて、 YYYY.MM.DD または MM/DD/YYYY または DD.MM.YYYY 形式が受け入れられます。

Discussion

Gitは、ある程度までは文字エンコードに依存しません。

  • ブロブオブジェクトの内容は、解釈されていないバイトのシーケンスです。コアレベルでのエンコーディング変換はありません。

  • パス名はUTF-8正規化形式C(UTF-8 normalization form C)でエンコードされます。これは、ツリーオブジェクト、インデックスファイル、ref名、およびコマンドライン引数、環境変数、構成ファイル( .git/config (git-config(1) 参照) と gitignore(5)gitattributes(5)gitmodules(5)) のパス名に適用されます。

    コアレベルのGitは、パス名を単に非NULバイトのシーケンスとして扱い、パス名をエンコードする変換はありません(MacとWindowsを除く)。したがって、非ASCIIパス名の使用は、レガシー拡張ASCIIエンコーディングを使用するプラットフォームやファイルシステムでもほとんど機能します。ただし、そのようなシステムで作成されたリポジトリは、UTF-8ベースのシステム(Linux、Mac、Windowsなど)では正しく機能しません。その逆も同様です。さらに、多くのGitベースのツールは、パス名がUTF-8であると単純に想定しており、他のエンコーディングを正しく表示できません。

  • コミットログメッセージは通常UTF-8でエンコードされますが、他の拡張ASCIIエンコードもサポートされています。これには、ISO-8859-x、CP125xなどが含まれますが、UTF-16/32、EBCDIC、およびCJKマルチバイトエンコーディング(GBK、Shift-JIS、Big5、EUC-x、CP9xxなど)は含まれません。

我々はコミットログメッセージをUTF-8でエンコードすることをお勧めしますが、コアとGit Porcelainはどちらも、プロジェクトでUTF-8を強制しないように設計されています。特定のプロジェクトのすべての参加者がレガシーエンコーディングを使用する方が便利だと感じた場合、Gitはそれを禁止しません。 ただし、覚えておくべきことがいくつかあります。

  1. git commitgit commit-tree は、プロジェクトがレガシーエンコーディングを使用していることを明示的に指定しない限り、与えられたコミットログメッセージが有効なUTF-8文字列のように見えない場合に警告を発します。明示的に指定する方法は、以下のように、 .git/config ファイルに i18n.commitEncoding を含めることです。

    [i18n]
            commitEncoding = ISO-8859-1

    上記の設定で作成されたコミットオブジェクトは、 encoding ヘッダーに i18n.commitEncoding の値を記録します。 これは、後でそれらを見る他の人々を助けるためです。このヘッダーがないということは、コミットログメッセージがUTF-8でエンコードされていることを意味します。

  2. git loggit showgit blame とその仲間たちは、コミットオブジェクトの encoding ヘッダーを見て、特に指定がない限り、ログメッセージをUTF-8に再コーディングしようとします。あなたは以下のように、 .git/config ファイルの i18n.logOutputEncoding を使用して目的の出力エンコーディングを指定できます。

    [i18n]
            logOutputEncoding = ISO-8859-1

    この構成変数がない場合は、代わりに i18n.commitEncoding の値が使用されます。

UTF-8への再コーディングは必ずしも可逆的な操作ではないため、我々はコミットが行われたときにコミットログメッセージを再コーディングしないことを意図的に選択したことに注意してください。

FILES

/etc/mailname

SEE ALSO

GIT

Part of the git(1) suite