git commit的--date参数的格式是什么


78

我需要覆盖git提交的日期,所有文档都指向--date参数,但随后却不知道适当的格式。我已经尝试了我能想到的每个排列,并且每个错误都出现“致命的:无效的日期格式:”错误。


1
该问题的某些答案确实部分回答了我的问题。我刚刚检查了一下,就可以了。顺便说一句,您不必将星期几放在那儿(那会很痛苦)。
v010dya

Answers:


82

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

请参阅Jeff King()的commit e4f031e(2015年6月30日)和commit aa1462ccommit a5481a6commit b7c1e11(2015年6月25日(通过合并JUNIOÇ滨野- -提交d939af1,2015年8月3日)peff
gitster

引入“格式”日期模式

这会将格式直接输入strftime
除了更加灵活之外,主要优点是您的系统 strftime可能会更多地了解您的语言环境的首选格式(例如,如何拼写一周中的几天)。

--date=format:...将格式提供...给您的系统strftime
用于--date=format:%c以系统区域设置的首选格式显示日期。
有关strftime格式占位符的完整列表,请参见手册。

达维德Cavestro提出的意见的例子:

git commit -m "Test" --date=format:relative:5.hours.ago 

原始答案(2014年中)

--date选项(于git1.7.0于2009年12月在commit 02b47cd中引入)使用与相同的格式GIT_AUTHOR_DATE,并且日期格式在commit 96b2d4f中进行了测试:

在这里,您可以看到接受的各种格式:

  • rfc2822: Mon, 3 Jul 2006 17:18:43 +0200
  • iso8601: 2006-07-03 17:18:43 +0200
  • 本地: Mon Jul 3 15:18:43 2006
  • short :(2006-07-03不在1.9.1中,在2.3.0中适用)
  • 相对的:请参见commit 34dc6e7

    5.seconds.ago, 
    2.years.3.months.ago, 
    '6am yesterday'
    
  • raw:参见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,等)。


是否接受2006-07-03 15:18:43当地?另外,相对格式和原始格式是什么?
ADTC

要回答我自己的第一个问题,是的,它确实有效,并且会自动采用本地时区。使用这种格式,我不必理会星期几(星期日,星期一等)。
ADTC 2014年

1
@ADTC我添加了相对和原始日期格式的链接和参考。我已将您的评论包含在答案中,以提高知名度。
VonC

1
@CiroSantilli不确定:那可能是一个很好的单独问题。我将用1.9.4对其进行测试。
VonC 2014年

1
@CiroSantilli六四事件法轮功感谢您的编辑,非常高兴看到2.3.0中的简短格式。
VonC

8

日期格式在Documentation / date-formats.txtman git commit)中记录不足,并且非常“人性化”地进行了解析。

唯一有效的方法是读取date.c下的源代码并进行尝试。

VonC在2.3.0上未提及的要点:

  • 仅根据位数来解析数字:

    • 2位数字:19YY,表示YY> = 73,表示当前月份,日期和时间。错误或当前日期,否则。

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

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

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

    这似乎是直接输入UNIX时间的最佳方法。

    2 ** 64-2(TODO为什么不为-1?)是不会导致提交错误的最大值。标记存储在C长中。

    git log2^55即使git cat-file -p HEAD显示了正确的数字,也显示了非常大的值(在TODO处的某个地方?),直到1970年,所以这似乎是对日期转换的限制。

    对于大于2**63 - 1最大正号的任何东西,尝试推送到GitHub都会失败date causes integer overflow当时在GitHub上的提交(由于某种原因GitHub无法显示非常大的日期

    VonC指出这很可耻,因为它阻止了负面日期,是否可以将git commit设置为在1970年之前具有时间戳记?可以用来将较旧的软件迁移到Git。

  • tea:今天17小时:-)


请注意,由于Git回购计划取决于日期(例如,这一日期:stackoverflow.com/q/29385441/6309),1970年之前的日期将是不错的:stackoverflow.com/a/24977895/6309
VonC 2015年

3
@VonC:不错的链接。自60年代/​​ 70年代程序员以来,版本控制就存在了。如果他们想将hammurabi的代码迁移到Git怎么办?:-)(啊,刚发现有人已经这样做了:github.com/elia/hammurabi/blob/master/lib/hammurabi/code.txt,但是丢失了时间戳记)
Ciro Santilli郝海东冠状病六四事件法轮功


1

下面的缩写形式都可以使用:

  1. <month>/<day>
  2. <month>-<day>
  3. <day>.<month>

如果没有歧义,即<day>大于12,则顺序<month> <day>无关紧要,并且分隔符可以是/',' -'或' .'中的任何一个。

否则,请使用' .'作为分隔符<day>.<month>,并使用' /'或' -'作为分隔符<month>-<day>

因此,“ 1.7”将被视为“ 7月1日”,而“ 1/7”将被视为“ 1月7日”。

请参阅v1.3.0中的相关提交

当分隔符为“。”时,我们更喜欢dd.mm.yyyy
mm.dd.yyyy; 否则,mm / dd / yy [yy]优先于
dd / mm / yy [yy]。

这也适用于接受日期输入的其他命令,例如:自2月4日起显示日志:

git log --since 2/4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.