2013-03-08 94 views
1

现在是3月8日。我想从3月1日起看到git的历史。为此我使用的命令:获取日期后的提交历史记录(自/参数后)

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

它工作正常。然后我希望看到“未来”的历史(自3月8日起+1天增加after值)。例如:

$ 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(苹果的Git-37)

+1

你的第二和第三个命令是相同的。另外,你说在'后'增加1,但你把它设置在11日后,而不是8日。 – 2013-03-08 18:30:27

+0

固定。 11 - 是8-17范围内的一个值。 – 2013-03-08 18:31:41

+1

我似乎记得一些进入'git'的东西根据分隔符的不同来解释模糊日期'2013-3-11'(是3月11日还是11月3日?欧洲人和美国人不同)。用'/'或'.'作为分隔符来尝试,看看这是否有所作为。 – twalberg 2013-03-08 19:04:05

回答

1

没有在这个问题上open bug。如果您从源代码构建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年3月10日,所以这些日期确实包含了转变)。

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

现在我们的日期看起来好一点。如果我确实希望时区生效,现在可以轻松更改为-0800/-0700,,PDT或任何其他时区。

总之,有两个问题:

  1. 你的时间没有被正确解析。一旦包含一个时间组件,git会更快地解析日期。
  2. 在寻求解析的任何日期,混帐丢弃你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 
    

你的问题应该是可以解决的一个时区取决于意图。

+0

谢谢您的全面解答。读完之后,我将日期模板替换为'“%d。%m。%Y”'并且它工作正常。 – 2013-03-09 09:21:41