web-dev-qa-db-ja.com

git log --sinはどうカウントされますか?

私はいくつかのコミットだけの簡単なテストリポジトリを持っていますが、日付と時刻のフィルタリングされたログを見たいです:

 $ git log --author = "automatix" --since = "2013-01-30" --pretty-test 
 commit ea0719bef142659fa561c9d040b2120012ed0184 
 Date:Thu Jan 31 02 :03:12 2013 +0100 
 
 commit ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304 
 Date:Thu Jan 31 01:59:11 2013 +0100 
 
 
 f9f9bf9bf9bf9bf9bf9bf9bf9bf9bf9bf9bf9f94b94f94b94f94f94f94f94f94f94f94f94b94f94f94b94f94f94f94f94f94b94bf9f9bf8f9bf8bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9fb8fb12b3bf3b8bf3f12a) .____。]日付:木1月31日01:50:38 2013 +0100 
 
 commit add77c8fe2ba9254c11b98e14facede3420dc51c 
日付:木1月31日01:48:34 2013 +0100 
 
 commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f 
日付:木1月31日01:46:27 2013 +0100 
 
 commit 8c286391e54d3fc1e210950b1320fd6f013_8.01_8.01 :41:27 2013 +0100 
 
 commit 9c880595e57f717383796fa2940f41f0f42f7e2a 
日付:木1月31日01:38:17 2013 +0100 
 
 
 
 commit a95527f36a533e1ecba1aadaea .____。]日付:木1月31日01:30:00 2013 +0100 

最初に選択されたコミットはa95527f36a533e1ecba1aadceea31a9dcbe1a8db from 2013-01-30 01:30:00。 8つのコミットが選択されています。

 $ git log --author = "automatix" --since = "2013-01-30" --format = oneline-test | wc 
 8 34 498 

OK。 2013-01-31

 $ git log --author = "automatix" --since = "2013-01-31" --format = oneline-test | wc 
 0 0 0 

何?わかりました、つまり、sinceルールexcludesは開始日のコミットです。右?

しかし続けましょう:

$ git log --author = "automatix" --since = "2013-01-31 01:30:00" --pretty-test 
 commit ea0719bef142659fa561c9d040b2120012ed0184 
 Date:Thu Jan 31 02 :03:12 2013 +0100 
 
 commit ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304 
 Date:Thu Jan 31 01:59:11 2013 +0100 
 
 
 f9f9bf9bf9bf9bf9bf9bf9bf9bf9bf9bf9bf9f94b94f94b94f94f94f94f94f94f94f94f94b94f94f94b94f94f94f94f94f94b94bf9f9bf8f9bf8bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9bf8b9fb8fb12b3bf3b8bf3f12a) .____。]日付:木1月31日01:50:38 2013 +0100 
 
 commit add77c8fe2ba9254c11b98e14facede3420dc51c 
日付:木1月31日01:48:34 2013 +0100 
 
 commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f 
日付:木1月31日01:46:27 2013 +0100 
 
 commit 8c286391e54d3fc1e210950b1320fd6f013_8.01_8.01 :41:27 2013 +0100 
 
 commit 9c880595e57f717383796fa2940f41f0f42f7e2a 
日付:木1月31日01:38:17 2013 +0100 
 
 
 
 commit a95527f36a533e1ecba1aadaea .____。]日付:木1月31日01:30:00 2013 +0100 
$ git log --author = "automatix" --since = "2013-01-31 01:30:00" --format = oneline-test | wc 
 8 34 498 

さて、私も開始時刻を書いているとき、開始時刻のコミットはincludedです。

論理がわかりません。誰が説明できますか、なぜそれがとても奇妙に働くのですか?

ありがとう

65
automatix

私がやったようにここに着く他の誰かを助ける場合は、少し調査した後、 ISO8601 format を使用してもうまくいくことがわかりました:

git log --since="2014-02-12T16:36:00-07:00"

これにより、秒単位の精度が得られます。注:以下も使用できます。

git log --after="2014-02-12T16:36:00-07:00"
git log --before="2014-02-12T16:36:00-07:00"
git log --since="1 month ago"
git log --since="2 weeks 3 days 2 hours 30 minutes 59 seconds ago"

等.

もちろん、これは「なぜそれがそれほど奇妙に機能するのかを説明する」ものではありません。しかし、それは確かに私にとって問題を解決しました。


編集:

もう少し研究した後、「なぜそれがそれほど奇妙に機能するのか」を見つけました。
日付形式を指定しない場合、 git logのデフォルトは作成者のタイムゾーンまたはコミット日付のいずれか であり、一貫した動作を意味するため、日付を明示的に宣言すると便利です。次のような形式でフォーマットします。

git log --date=local

最後に、時間を指定しない場合、コマンドを実行したときのデフォルトはローカル時間になります。

要するに、具体的であることは問題を解決するはずです。

git log --date=local --after="2014-02-12T16:36:00-07:00"

また、次のコマンドを使用して、デフォルトの日付形式を永続的に設定できます。

git config log.date local

次のいずれかの値を使用できます:(relative|local|default|iso|rfc|short|raw)

109
gMale