2017-01-07 12 views
0

私はすべてのコミットのリストをa repositoryに、年初から取得したいと考えていました。私は明白なコマンドを使用してみましたが、それはそれらのいずれかが含まれていません。なぜgit log --sinceに私が期待しているコミットが含まれていないのですか?

 
$ git log --pretty='format:%h %ae %cI %s' [email protected] --since=2017-01-01 
$ 

は奇妙なことに、私は私にそれらのいくつかを取得され、--since=2016-12-19を使用する必要があります。

 
$ git log --pretty='format:%h %ae %cI %s' [email protected] --since=2016-12-20 
$ git log --pretty='format:%h %ae %cI %s' [email protected] --since=2016-12-19 
61569b5 [email protected] 2017-01-02T16:25:22+08:00 Bug 1324624 - Tweak stylo crashtest assertion annotations a bit more. 
7fca5ff [email protected] 2016-12-29T16:32:01+08:00 Bug 1323892 - Followup to disable one more crashtest under stylo. 
cd875e7 [email protected] 2016-12-28T17:50:44+08:00 Bug 1326023 - Make Element::GetBindingURL return a strong reference. r=smaug 
3c057d1 [email protected] 2017-01-02T15:44:23+08:00 Bug 1323717 - Re-enable 1290994-4.html. r=manishearth 
7a45228 [email protected] 2016-12-28T17:50:44+08:00 Bug 1326023 - Make Element::GetBindingURL return a strong reference. r=smaug 
171e45e [email protected] 2017-01-03T18:35:15+08:00 Bug 1328223 - stylo: Ignore invalid URLs from @import rules. r=emilio 
$ 

をしかし、それだけではありませんそれらの:

$ git log --pretty='format:%h %ae %cI %s' [email protected] | grep 2017- | wc -l 
19

ここで何が起こっているの? --sinceは、指定された日付よりも前の出力からコミットを削除する以外の何かをしますか?

答えて

1

私は悪いことに(私は "悪い"キャンプにいます)、gitはあなたが日付を指定するときの現在の時刻をデフォルトにします。お試しください。--since='midnight 2016-12-20'

...大丈夫です。私はまだコードを解読していないが、これはそれのためにとてもよさそうだ:

~/src/gecko-dev$ lgdo @ --pretty=%h%x09%aI%x09%cI%x09%ae 
* 1e82e8d0792b  2017-01-06T10:59:19-05:00  2017-01-06T10:59:19-05:00  [email protected] 
|\ 
| * cddd3c28b212  2017-01-06T22:10:08+11:00  2017-01-06T22:10:08+11:00  [email protected] 
| * c337ff9019fb  2016-11-21T15:58:37-08:00  2016-11-21T15:58:37-08:00  [email protected] 
| * aa46f91d69e7  2017-01-05T17:14:46+01:00  2017-01-05T17:14:46+01:00  [email protected] 
| * d1ef4e265960  2017-01-06T21:12:08+11:00  2017-01-06T21:12:08+11:00  [email protected] 
| * 76040295f609  2017-01-06T21:12:08+11:00  2017-01-06T21:12:08+11:00  [email protected] 
| * 1b2b0886c923  2017-01-06T21:12:08+11:00  2017-01-06T21:12:08+11:00  [email protected] 
| * 41782ed8bfb7  2017-01-06T15:30:31+08:00  2017-01-06T15:30:31+08:00  [email protected] 
| * 318a182e13bb  2017-01-06T15:29:47+08:00  2017-01-06T15:29:47+08:00  [email protected] 
| * b54b74578c69  2017-01-06T15:21:19+08:00  2017-01-06T15:21:19+08:00  [email protected] 
| * 076ab8862963  2017-01-06T15:05:24+08:00  2017-01-06T15:05:24+08:00  [email protected] 
| * 13ce7a2e81b0  2017-01-06T15:05:24+08:00  2017-01-06T15:05:24+08:00  [email protected] 

は、あなたのコミットは2016年11月21日付けの、c337ff9を背後にコミットしている注意してください。私は、どこかにヒューリスティックがあると賭けています。それは、カットオフ前の1か月以上前のコミットに遭遇すると、見た目が止まると言います。注目に値する

+0

'--since = 'midnight 2017-01-01'を使っても今年のコミットは表示されません。 – heycam

+0

私は、どのタイムスタンプがチェックされているかをドキュメントでは分かりませんが、固定されていないかどうかはわかります。 – jthill

+0

著者とコミット日付の違いを教えてくれてありがとう。私は 'git log --pretty = 'フォーマットをしました:%h%ae%aI%s' [email protected] | grep 2017- | wc -l'となり、2017年には印刷された日付で19のコミットが得られます。 – heycam

0

さらにいくつかの注意事項、:

  1. Gitは最小値と最大値、年齢パラメータ(少なくとも現在はほぼ-2.12ソースのような)のために、コミット日付ではなく、作者の日付を使用しています。近似パーサーからの出力は、--sinceを使用したときにrevs->max_age(それ以外の場合は-1)になります。これは本当に文書化されるべきです、私は古いGitのバージョンが同じことをするのかどうかは分かりません。

  2. revs->limitedが設定されている場合は、limit_revsが呼び出され、UNINTERESTINGフラグが親コミットから子に伝播されます。 UNINTERESTINGフラグは、1つのコミットがmax_age設定を過ぎたときにも設定されます。これによりコミットの子孫すべてが後でコミッターの日付で整理されます。ただし、revs->limitedは、コミット制限操作(たとえば、--ancestry-pathおよび--simplify-by-decorationを含む)によって代わりにオンになっているので、ここで実際には設定しないでください。

  3. 内部機能get_revision_1does something similar if revs->limited is not set, except that it doesn't even add the parent commits

がにもかかわらず日付が正常に非減少されるだろうコミット、それはに間違っているようだ1は常に特定のコミットスルーコミットしても、マージ与えられた任意の日をコミットすることができるので、彼らは非減少しているを想定例えば、環境変数GIT_COMMITTER_DATE。悪意のある場合でも、コンピュータの時計は必ずしも正しいとは限りません。自分のコンピュータが何らかの理由で1973年に設定されているときに他の人の仕事を合併しても、それは過去に他の人の仕事を入れていません。

+0

これはかなり意図していない動作だと思います。2008年にLinusがコミットしています(grep = bad.commit.dates)。 :-P – jthill

関連する問題