## 命名

git-commit-tree - 创建一个新的提交对象

## 概要

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

## 描述

这通常不是最终用户想要直接运行的。请参阅git-commit [1]。

基于提供的树对象创建一个新的提交对象，并在stdout上发出新的提交对象ID。日志消息被从标准输入读取，除非`-m`或`-F`选项中给出。

一个提交对象可以有任意数量的父母。只有一位家长，这是一个普通的提交。拥有多个父代使得提交在多行历史记录之间合并。初始（根）提交没有父母。

虽然树表示工作目录的特定目录状态，但提交表示“时间”中的状态，并说明如何到达那里。

通常一个提交会标识一个新的“HEAD”状态，尽管Git并不在乎你保存关于该状态的注释，但实际上我们倾向于只将结果写入指向的文件`.git/HEAD`，以便我们可以总是看看最近承诺的状态是什么。

## 选项

<tree>

现有的树对象

-p <parent>

每个`-p`表示一个父提交对象的ID。

-m <message>

提交日志消息中的段落。这可以不止一次给出，每个<message>成为它自己的段落。

-F <file>

从给定的文件中读取提交日志消息。用于`-`从标准输入读取。

-S<keyid> --gpg-sign=<keyid>

GPG标志提交。该`keyid`参数是可选的，并且默认为提交者身份; 如果指定，它必须粘贴到选项没有空格。

--no-gpg-sign

不要GPG签名提交，以便`--gpg-sign`在命令行中反馈前面给出的选项。

## 提交信息

一个提交封装：

- 所有父对象ID

- 作者姓名，电子邮件和日期

- 提交者名称和电子邮件以及提交时间。虽然在命令行上提供了父对象ID，但如果设置了作者和提交者信息，则会从以下环境变量中获取信息：GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_COMMITTER_DATE（nb“<”，“>”和“\ n”被删除）如果这些环境变量没有设置（某些），则信息从配置项user.name和user.email中获取，或者如果不存在，则会获取环境变量EMAIL，或，如果没有设置，那么系统用户名和用于发送邮件的`/etc/mailname`主机名（当该文件不存在时取回并返回到全限定主机名）。从stdin读取提交评论。如果没有通过“<”提供更改日志条目`git commit-tree`将只是等待一个输入，并与^ D.Date formatsThe终止`GIT_AUTHOR_DATE`，`GIT_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`字符。注意此外，日期部分可以采用以下格式：YYYY.MM.DD，MM / DD / YYYY和DD.MM.YYYY.DiscussionGit在某种程度上是字符编码不可知。

- blob对象的内容是未解释的字节序列。在核心层面没有编码翻译。

- 路径名以UTF-8标准化形式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和许多其他版本，但`not`UTF-16/32，EBCDIC和CJK多字节编码（GBK，Shift-JIS，Big5，EUC-x，CP9xx等）。

虽然我们鼓励提交日志消息使用UTF-8编码，但核心和Git瓷器都设计为不强制项目使用UTF-8。如果特定项目的所有参与者发现使用遗留编码更方便，Git不会禁止它。但是，有几件事要牢记。

1. `git commit`和`git commit-tree`如和果提交给它的提交日志消息看起来不像一个有效的UTF-8字符串，则会发出警告，除非您明确声明您的项目使用了旧版编码。这样说的方式是在`.git/config`文件中使用i18n.commitencoding ，如下所示：i18n commitEncoding = ISO-8859-1Commit用上述设置创建的对象记录`i18n.commitEncoding`其`encoding`标头中的值。这是为了帮助稍后看到他们的其他人。缺少这个头部意味着提交日志消息以UTF-8编码。

2. `git log`，`git show`，`git blame`和朋友看`encoding`一个提交对象的报头，并且尝试除非另有规定重新代码日志消息转换成UTF-8。您可以`i18n.logOutputEncoding`在`.git/config`文件中指定所需的输出编码，如下所示：

i18n logOutputEncoding = ISO-8859-1

如果您没有此配置变量，`i18n.commitEncoding`则会使用该值。

请注意，在提交对象级别强制使用UTF-8时，我们故意选择不重新编写提交日志消息，因为重新编码为UTF-8不一定是可逆操作。

## 文件

/etc/mailname