2013-03-08 108 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