【问题标题】:what is the first line of git format-patch output?git format-patch 输出的第一行是什么?
【发布时间】:2013-03-25 06:47:00
【问题描述】:

运行 git format-patch 时,目的是为您编写的代码创建一个电子邮件表示。到目前为止,一切都很好。我不是电子邮件专家,但在我看来,此格式补丁输出的第一行不是标准电子邮件标题格式...

来自 de8d128fb520416e0b029c913b3a5ce900d0320c 2001 年 9 月 17 日星期一 00:00:00 消息 ID: 来自:克里斯托弗·哈维 日期:2013 年 4 月 3 日,星期三 10:17:52 -0400 主题:[补丁 0/3] *** 主题在这里 *** 致:克里斯托弗·哈维 *** 在这里模糊 *** 克里斯托弗哈维(3): 提交 2 提交 3 提交 4 数据 | 3 +++ 1 个文件已更改,3 个插入(+) -- 1.7.12.4

From de8d128fb520416e0b029c913b3a5ce900d0320c Mon Sep 17 00:00:00 2001 是什么?日期是什么?它对我来说看起来很随意,而且它也阻止我将它传送到 sendmail。每次我想发送补丁时,我都必须手动删除该行。

谢谢。

【问题讨论】:

  • git log -S 'Mon Sep 17 00:00:00 2001' --all -p --source --reverse -- . ':(exclude)t' 表明是 Hamano 提交了引入神奇日期的提交,但它没有说明为什么选择它。 UNIX 时间戳似乎也不是一个非常特殊的数字:1000677600,尽管它比字符串更简洁。
  • 同样 SHA-1 是提交的,但它有点没用,因为 SHA-1 一旦应用到新的提交者和父提交中就会改变。

标签: git format-patch


【解决方案1】:

来自git help format-patch

讨论 git format-patch 生成的补丁是 UNIX 邮箱格式,带有 一个固定的“魔术”时间戳,表示文件是从 格式补丁而不是真正的邮箱,像这样:

       From 8f72bad1baf19a53459661343e21d6491c3908d3 Mon Sep 17 00:00:00 2001
       From: Tony Luck <tony.luck@intel.com>
       Date: Tue, 13 Jul 2010 11:42:54 -0700
       Subject: [PATCH] =?UTF-8?q?> > [IA64]=20Put=20ia64=20config=20files=20on=20the=20?=
        =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig=20diet?=
       MIME-Version: 1.0
       Content-Type: text/plain; charset=UTF-8
       Content-Transfer-Encoding: 8bit

【讨论】:

  • 我可能会注意到 Linux Torvalds 于 9 月 17 日(但在 1991 年)发布了 Linux 内核的第一个版本。
【解决方案2】:

作为Fredrik's answer 的附录,以下是 Junio Hamano 的一些相关 cmets:

"Mon Sep 17 00:00:00 2001" 只是一个伪造的随机日期,以使常见的MUA 可以识别 Unix-From 行,并且与您的提交对象没有任何关系。实际日期在Date: 标头上。

实际上,我曾经尝试将其更改为 git 的生日 (Thu Apr 7 15:13:13 2005 -0700),我记得原来有些人的脚本(或者可能是 MUA)被破坏了,并且关心 Unix 上“7”之前的内容- 从行并丢弃该更新。

"From $SHA1 $magic_timestamp" 行和其他标题行使其看起来像 mbox

链接:123

【讨论】:

  • 滨野报价+1。但我希望有人能解释为什么选择那个神奇的日期,或者它是否只是随机的。
  • « 原来有些人的脚本(或者可能是 MUA)被破坏并关心“7”之前的内容 » -- 根据您提供的日期,您违反了日期应该是的 mbox 格式标准 C asctime 格式。 day-of-month 字段是一个空格填充的右对齐两位数字 (%2d),这使得它在 Month 和 Day 之间有两个空格,表示一位数的日子。请参阅MBOX Email Formatasctime 以供参考。
  • “我记得原来有些人的脚本(或者可能是 MUA)被破坏了,并且关心“7”之前的内容——哪个“7”?第一个“7”还是第二个?
【解决方案3】:

输出为 mbox 格式。您可以使用以下命令轻松剥离第一行:

git format-patch --stdout <range> | sed 1d

然后按你的意愿处理结果。

您也可以使用git 本身来发送电子邮件。试试:

git send-mail --smtp-server=<your server> *.patch

请参阅GIT Send-Mail Manpage 了解所有选项。

【讨论】:

    【解决方案4】:

    来自维基百科 (https://en.wikipedia.org/wiki/September_17)

    2001 年 - 纽约证券交易所在 9 月 11 日袭击事件后重新开放交易,这是自大萧条以来最长的关闭时间。

    也许只是巧合!

    【讨论】:

      【解决方案5】:

      Git 2.32(2021 年第 2 季度)实际上在其余文档开始引用之前解释了格式补丁输出的部分内容。

      参见Junio C Hamano (gitster)commit 28e29ee(2021 年 3 月 24 日)。
      (由 Junio C Hamano -- gitster -- 合并到 commit 5c2f7ff,2021 年 3 月 30 日)

      format-patch:概述一下什么是“补丁”消息

      文中说“补丁”是为每个提交准备一个,它适用于电子邮件提交,“am”是使用它的命令,但没有说明“补丁”到底是什么.

      页面中的描述也提到了“三划线”,但不清楚它是什么,除非给读者更详细地概述了“补丁”是什么。

      添加一个简短的段落以概述输出的外观。

      git format-patch 现在包含在其man page 中:

      准备每个提交及其“补丁” 每次提交一个“消息”,格式类似于 UNIX 邮箱。

      命令生成的“消息”由三部分组成:

      • From &lt;commit&gt; 开头的简短元数据标头 带有固定的Mon Sep 17 00:00:00 2001 日期戳来帮助程序 像 "file(1)" 来识别文件是这个的输出 命令,记录作者身份的字段,作者日期, 以及变更的标题(取自 提交日志消息)。

      • 提交日志消息的第二段和后续段落。

      • “补丁”,即“diff -p --stat”输出(参见 git diff) 在提交与其父级之间。

      日志消息和补丁由一行分隔 三点划线。

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 2011-06-03
        • 2011-12-11
        • 2011-09-11
        • 2013-04-24
        • 2015-07-02
        • 1970-01-01
        相关资源
        最近更新 更多