Git日志--since日期字符串解析

3

今天我在查看一个子模块的日志时(有点着急),在命令中将一些错误输入到了日期中。

git log --since="2019-12-31" --oneline | wc -l
      90

而我本来想输入的是,

,但我输错了。

git log --since="2019-12=31" --oneline | wc -l
    2147

我对计数的差异感到惊讶,这就是我能立即注意到错误的原因。然而,我不清楚在这种情况下行为是什么样的。这是一个bug还是git log的预期行为?

我本来以为会出现解析错误,但看起来日志可以追溯到2019年1月或2月。


这个回答解决了你的问题吗?Git日期语法规范 - Adrian Cornish
你检查了实际输出吗?你确定它不是2147行“错误日期”类型的错误吗? - Adrian Cornish
2
@AdrianCornish:不是这样的,git实际上正在输出历史记录,我已经尝试过了。 - John Zwinck
1
@AdrianCornish 这个链接并没有回答问题。 - Lucas Roberts
1个回答

4

看起来Git的日期解析在遇到无法理解的部分时就会停止。例如,“2015-13”被理解为“2015”,同样的,“2015-4444”也是。

在你的情况下,它将“2019-12=31”视为“2019”。然后第二个奇怪的“功能”出现了:--since 2019并不意味着--since 2019-01-01,它意味着“自2019年的今天日期”。因此,当你运行时,--since 2019-12-31的含义实际上会在每年变化!

似乎正在发生的事情是:

  1. 生成当前日期时间(在您的时区)。
  2. 替换您在--since中指定的部分,如果解析器不能确定如何解析,则忽略月份和日期部分。

请注意,即使是简单且“显然正确”的git log --since 2019-12-31也没有像人们期望的那样真正做到,因为它显示的是自那一天的当前时间以来的提交,而不是自午夜以来的提交。因此,除非您指定完整的日期时间字符串,否则总会存在对命令执行时间的某些依赖。


感谢您的澄清和提供近似C代码的链接,非常有趣!标记为正确。 - Lucas Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接