1

现在是3月8日。我想查看自 3 月 1 日以来的 git 历史记录。为此,我正在使用命令:

$ git log --pretty="%cd - %h - %an - %s" --after="2013-3-01 0am"

它工作正常。然后我想看看“未来”的历史(自 3 月 8 日起,after价值增加了​​ +1 天)。例子:

$ git log --pretty="%cd - %h - %an - %s" --after="2013-3-11 0am"

命令返回空历史,这是正确的。那么after值等于 18:

$ git log --pretty="%cd - %h - %an - %s" --after="2013-3-18 0am"

Git 开始返回整月历史。为什么?git log在我的示例中,日期时间格式似乎有问题。

git 版本 1.7.12.4 (Apple Git-37)

4

1 回答 1

1

在这个问题上有一个开放的错误。如果您从源代码构建了 git,test-date则包含一个实用程序。以下是通过它运行各种日期的一些结果(注意 - 18 号不再是我的断点,所以使用 19 号):

$ ./test-date approxidate "2013-3-01 0am"
2013-3-01 0am -> 2013-03-01 19:22:21 +0000

$ ./test-date approxidate "2013-3-11 0am"
2013-3-11 0am -> 2013-03-11 19:22:21 +0000

$ ./test-date approxidate "2013-3-19 0am"
2013-3-19 0am -> 2013-03-03 19:22:21 +0000

很明显,在所有情况下时间都是有问题的,所以让我们修正一下时间:

$ ./test-date approxidate "2013-3-01 0:00"
2013-3-01 0:00 -> 2013-03-01 08:00:00 +0000
$ ./test-date approxidate "2013-3-19 0:00"
2013-3-19 0:00 -> 2013-03-19 07:00:00 +0000

看起来好一点,我们未来的日期不再严重不正确,但时间与我的时区有关,并且在有和没有 DST 之间有所不同(E:对于任何未来的读者,DST 转变发生在 2013-03-10 ,所以这些日期确实包含了转变)。

$ ./test-date approxidate "2013-3-19 0:00 +0000"
2013-3-19 0:00 +0000 -> 2013-03-19 00:00:00 +0000

现在我们的约会看起来好多了。如果我确实希望时区生效,现在可以轻松更改为-0800/ -0700PSTPDT或任何其他时区。

简而言之,有两个问题:

  1. 您的时间没有被正确解析。一旦包含了时间组件,git 在解析日期方面就会变得更加智能。
  2. 在解析任何日期的过程中,git 会丢弃你的并在当月的某一天dd使用你的:mm

    $ ./test-date approxidate "2013-3-20"
    2013-3-20 -> 2013-03-03 19:22:21 +0000
    $ ./test-date approxidate "2013-4-19"
    2013-4-19 -> 2013-03-04 19:22:21 +0000
    $ ./test-date approxidate "2013-4-32"
    2013-4-32 -> 2013-03-04 19:22:21 +0000
    

您的问题应该可以通过固定时间并根据意图添加时区来解决。

于 2013-03-08T19:43:38.757 回答