Git
简体中文 ▾ Topics ▾ Latest version ▾ git-commit-tree last updated in 2.44.0

名称

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

概述

git commit-tree <目录树> [(-p <父对象>)…​]
git commit-tree [(-p <父对象>)…​] [-S[<keyid>]] [(-m <消息>)…​]
		  [(-F <文件>)…​] <目录树>

描述

This is usually not what an end user wants to run directly. See git-commit[1] instead.

根据提供的树对象创建新的提交对象,并将新的提交对象 id 发送到 stdout。除非给出 -m 或 `-F`选项,否则日志信息将从标准输入读取。

m-F 选项可以以任意顺序给出任意次数。提交日志信息将按照选项的顺序排列。

A commit object may have any number of parents. With exactly one parent, it is an ordinary commit. Having more than one parent makes the commit a merge between several lines of history. Initial (root) commits have no parents.

树表示工作目录的特定目录状态,而提交则表示 “时间” 上的状态,并说明如何到达该状态。

通常情况下,一次提交会确定一个新的 "HEAD" 状态,虽然 Git 并不关心你把关于该状态的注释保存在哪里,但在实践中,我们倾向于把结果写入 .git/HEAD 指向的文件,这样我们就能随时看到上次提交的状态。

选项

<目录树>

一个现有的目录树对象。

-p <父提交>

每个 -p 表示父提交对象的 id。

-m <信息>

提交日志信息中的一个段落。可以给出多个段落,每个 <信息> 都将成为自己的段落。

-F <文件>

从给定文件中读取提交日志信息。使用 - 从标准输入读取。可以多次给定该文件,每个文件的内容都会成为自己的段落。

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

GPG 签名提交。keyid 参数是可选的,默认为提交者身份;如果指定,必须与选项粘连,不能有空格。--no-gpg-sign 用于抵消命令行中先前给出的 `--gpg-sign`选项。

提交信息

一个提交封装了:

  • 所有父对象 ID

  • 作者姓名、电子邮件和日期

  • 提交者姓名、电子邮件和提交时间。

提交注释从标准输入流读取。如果没有通过 "<" 重定向提供更新日志条目,git commit-tree 就会等待输入条目,并以 ^D 结束。

日期格式

GIT_AUTHOR_DATE, GIT_COMMITTER_DATE 环境变量:

Git 内部格式

It is <unix-timestamp> <time-zone-offset>, where <unix-timestamp> is the number of seconds since the UNIX epoch. <time-zone-offset> is a positive or negative offset from UTC. For example CET (which is 1 hour ahead of UTC) is +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.019 将被视为 2005-04-07T22:13:13

Note
此外,日期部分还接受以下格式:YYYY.MM.DDMM/DD/YYYYDD.MM.YYYY

讨论

Git在某种程度上是与字符编码无关的。

  • blob对象的内容是未经解释的字节序列。 在核心层没有编码转换。

  • 路径名以UTF-8规范化形式C编码,这适用于树对象、索引文件、参考名称,以及命令行参数、环境变量和配置文件(.git/config(见git-config[1]),linkgit:gitignore[5],linkgit: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 commit "和 "git commit-tree "如果收到的提交日志信息不像是有效的UTF-8字符串,就会发出警告,除非你明确表示你的项目使用的是传统编码。 说这个的方法是在`.git/config`文件中设置`i18n.commitEncoding`,像这样。

    [i18n]
    	commitEncoding = ISO-8859-1

    用上述设置创建的提交对象在其`encoding`头中记录了`i18n.commitEncoding`的值。 这是为了帮助以后看这些对象的人。 缺少这个头意味着提交日志信息是以UTF-8编码的。

  2. git log, git show, git blame and friends look at the encoding header of a commit object, and try to re-code the log message into UTF-8 unless otherwise specified. You can specify the desired output encoding with i18n.logOutputEncoding in .git/config file, like this:

    [i18n]
    	logOutputEncoding = ISO-8859-1

    如果你没有这个配置变量,则使用`i18n.commitEncoding`的值来代替。

请注意,我们特意选择在提交对象层面上,不对提交日志信息进行重新编码,因为重新编码为UTF-8不一定是一个可逆的操作。

文件

/etc/mailname

GIT

属于 git[1] 文档

scroll-to-top