git commit的–date参数的格式是什么?

我需要覆盖git的提交date,所有的文档指向–date参数,但是留下一个没有线索的适当的格式。 我已经尝试了所有我能想到的排列方式,而且每个人都会遇到“致命的:无效的date格式:”错误。

Git 2.6+(2015年第三季度)添加一个新选项。

请参阅提交e4f031e (2015年6月30日),并提交 Jeff King( peff ) 提交的aa1462c , 提交a5481a6 , 提交b7c1e11 (2015年6月25日) 。
(由Junio C gitster合并- gitster – in commit d939af1 ,2015年8月3日)

引入“格式”date模式

这直接将格式提供给strftime
除了更加灵活一些之外,主要优势在于你的系统strftime可以更多的了解你的语言环境的首选格式(例如,如何拼写星期几)。

--date=format:...将格式传给你的系统strftime
使用--date=format:%c以系统区域设置的首选格式显示date。
有关格式占位符的完整列表,请参阅strftime手册。


原始答案(2014年中)

--date选项(2009年12月的提交02b47cd引入,git1.7.0)使用与GIT_AUTHOR_DATE相同的格式,在提交96b2d4f中testing了date格式:

在那里你可以看到接受的各种格式:

  • Mon, 3 Jul 2006 17:18:43 +0200
  • iso8601: 2006-07-03 17:18:43 +0200
  • 当地时间: Mon Jul 3 15:18:43 2006
  • 简称: 2006-07-03 (不在1.9.1中,在2.3.0中工作)
  • 相对:见提交34dc6e7 :

     5.seconds.ago, 2.years.3.months.ago, '6am yesterday' 
  • 原始的:参见commit 7dff9b3 (git 1.6.2,2009年3月)
    内部原始git格式 – 从时代加时区开始的秒数
    (换句话说:' date +"%s %z" '''格式)

  • 默认: Mon Jul 3 17:18:43 2006 +0200

ADTC 在评论中询问和回答:

它接受2006-07-03 15:18:43为地方?

是的,它工作,它会自动采取当地时区。
用这种格式,我不需要打扰星期几( SunMon等)。

date格式在Documentation / date-formats.txt ( man git commit )没有logging,并且非常“人性化”地被parsing。

唯一可行的是读取date.c下的源文件并尝试。

VonC在2.3.0中未提及的要点:

  • 数字只能根据位数来parsing:

    • 2位:19YY,YY> = 73,当前月份,date和时间。 错误或当前date,否则。

    • 4位数字:YYYY,YYYY> = 1973,<= 2099

    • > 8个数字到一些小的限制(TODO哪个?):UNIX时间(自1970年以来的秒数)

  • @<digits> +0000 :UNIX时间。

    这似乎是直接inputUNIX时间的最佳方法。

    2 ** 64 – 2(TODO为什么不是-1?)是不会导致提交错误的最大值。 邮票存放在C长。

    git log在1970年显示非常大的值(大约2^55 TODO在哪里?),尽pipegit cat-file -p HEAD显示存储了正确的数字,所以它似乎是date转换的限制。

    对于大于2**63 - 1任何事情,最大的正数签名为long,试图推送到GitHub失败,并date causes integer overflow 。 在GitHub (GitHub 由于某种原因无法显示真正的大date ) 提交,

    VonC指出,这是一个耻辱,因为它阻止否定date是否有可能设置一个git提交具有1970年之前的时间戳? 可以用来将旧的软件迁移到Git。

  • tea :今天17时:-)