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

名前

git-commit-tree - 新しいコミットオブジェクトを作成する

概要

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

説明

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

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

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

コミットオブジェクトは任意の数の親を持つことができます。親がちょうど1つの場合、それは通常のコミットです。複数の親を持つコミットは、いくつかの履歴ライン間のマージになります。初期(ルート)コミットは親を持ちません。

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

通常、コミットは新しい「HEAD」状態を識別しますが、Gitはその状態に関するメモをどこに保存するかは気にしません。実際には、.git/HEAD が指すファイルに結果を書き込む傾向があるため、最後にコミットされた状態が常にわかります。

オプション

<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 オプションを打ち消すのに役立ちます。

コミット情報

コミットは以下をカプセル化します。

  • すべての親オブジェクトID

  • 著者名、メール、日付

  • コミッター名、メール、コミット時刻。

コミットコメントは標準入力から読み込まれます。「<」リダイレクトによって変更ログエントリが提供されない場合、git commit-tree は入力され ^D で終了されるまで待ちます。

日付形式

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

Git内部形式

これは <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 として扱われます。

さらに、日付部分は YYYY.MM.DDMM/DD/YYYYDD.MM.YYYY の形式で受け入れられます。

議論

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

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

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

    Gitはコアレベルではパス名を単にNULLバイト以外のバイトのシーケンスとして扱っており、パス名のエンコード変換は行われないことに注意してください (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

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

  2. git loggit showgit blame などは、コミットオブジェクトの encoding ヘッダーを見て、特に指定がない限りログメッセージをUTF-8に再エンコードしようとします。必要な出力エンコーディングは、.git/config ファイルの i18n.logOutputEncoding で次のように指定できます。

    [i18n]
    	logOutputEncoding = ISO-8859-1

    この設定変数が存在しない場合、代わりにi18n.commitEncodingの値が使用されます。

コミット時にコミットオブジェクトレベルでUTF-8を強制するためにコミットログメッセージを再コードしないことを意図的に選択したことに注意してください。これは、UTF-8への再コードは必ずしも可逆操作ではないためです。

ファイル

/etc/mailname

GIT

git[1]スイートの一部

scroll-to-top