git commit-tree

优质
小牛编辑
132浏览
2023-12-01

命名

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_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字符。注意此外,日期部分可以采用以下格式: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和许多其他版本,但notUTF-16/32,EBCDIC和CJK多字节编码(GBK,Shift-JIS,Big5,EUC-x,CP9xx等)。

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

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

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

i18n logOutputEncoding = ISO-8859-1

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

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

文件

/etc/mailname