我想从年初开始获取a repository的所有提交列表。我尝试了明显的命令,但它并没有包括任何一个:
$ git log --pretty='format:%h %ae %cI %s' --author=cam@mcc.id.au --since=2017-01-01 $
奇怪的是,我必须使用--since=2016-12-19
,这会让我得到一些:
$ git log --pretty='format:%h %ae %cI %s' --author=cam@mcc.id.au --since=2016-12-20 $ git log --pretty='format:%h %ae %cI %s' --author=cam@mcc.id.au --since=2016-12-19 61569b5 cam@mcc.id.au 2017-01-02T16:25:22+08:00 Bug 1324624 - Tweak stylo crashtest assertion annotations a bit more. 7fca5ff cam@mcc.id.au 2016-12-29T16:32:01+08:00 Bug 1323892 - Followup to disable one more crashtest under stylo. cd875e7 cam@mcc.id.au 2016-12-28T17:50:44+08:00 Bug 1326023 - Make Element::GetBindingURL return a strong reference. r=smaug 3c057d1 cam@mcc.id.au 2017-01-02T15:44:23+08:00 Bug 1323717 - Re-enable 1290994-4.html. r=manishearth 7a45228 cam@mcc.id.au 2016-12-28T17:50:44+08:00 Bug 1326023 - Make Element::GetBindingURL return a strong reference. r=smaug 171e45e cam@mcc.id.au 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' --author=cam@mcc.id.au | grep 2017- | wc -l 19
这里发生了什么? --since
除了从输出中删除早于给定日期的提交外,是否还要执行某些操作?
答案 0 :(得分: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 ihsiao@mozilla.com
|\
| * cddd3c28b212 2017-01-06T22:10:08+11:00 2017-01-06T22:10:08+11:00 me@upsuper.org
| * c337ff9019fb 2016-11-21T15:58:37-08:00 2016-11-21T15:58:37-08:00 olucafont6@yahoo.com
| * aa46f91d69e7 2017-01-05T17:14:46+01:00 2017-01-05T17:14:46+01:00 benj@benj.me
| * d1ef4e265960 2017-01-06T21:12:08+11:00 2017-01-06T21:12:08+11:00 me@upsuper.org
| * 76040295f609 2017-01-06T21:12:08+11:00 2017-01-06T21:12:08+11:00 me@upsuper.org
| * 1b2b0886c923 2017-01-06T21:12:08+11:00 2017-01-06T21:12:08+11:00 me@upsuper.org
| * 41782ed8bfb7 2017-01-06T15:30:31+08:00 2017-01-06T15:30:31+08:00 cam@mcc.id.au
| * 318a182e13bb 2017-01-06T15:29:47+08:00 2017-01-06T15:29:47+08:00 cam@mcc.id.au
| * b54b74578c69 2017-01-06T15:21:19+08:00 2017-01-06T15:21:19+08:00 cam@mcc.id.au
| * 076ab8862963 2017-01-06T15:05:24+08:00 2017-01-06T15:05:24+08:00 cam@mcc.id.au
| * 13ce7a2e81b0 2017-01-06T15:05:24+08:00 2017-01-06T15:05:24+08:00 cam@mcc.id.au
请注意,您的提交已落后于提交c337ff9
,日期为2016-11-21。我打赌那里有某种启发式方法,如果遇到截止日期超过一个月的提交,就会停止查看。
答案 1 :(得分:0)
还有一些注意事项,值得注意的是:
Git使用提交日期,而不是作者日期,用于最小和最大年龄参数(至少当前接近2.12来源)。当使用revs->max_age
时,来自近似解析器的输出进入--since
(否则只是-1)。这应该记录下来,我不确定较旧的Git版本是否做同样的事情。
如果设置revs->limited
,则会调用函数limit_revs
,该函数会将UNINTERESTING
标志从父提交传播到其子项。当一个提交超过UNINTERESTING
设置时,max_age
标志也会设置。这将修改提交的所有子节点以及稍后的提交日期。但是,revs->limited
实际上不应在此处设置,因为它是通过提交限制操作(例如包括--ancestry-path
和--simplify-by-decoration
)启用的。
内部函数get_revision_1
does something similar if revs->limited
is not set, except that it doesn't even add the parent commits。
即使提交日期通常不会减少,但假设它们不会减少,这似乎是不正确的,因为任何给定日期都可以强制特定的提交日期例如,提交 - 甚至是合并提交 - 通过GIT_COMMITTER_DATE
环境变量。或者,即使没有恶意,计算机时钟也不总是正确的。如果有人在他们的计算机出于某种原因设置为1973年时合并其他人的工作,那么过去并没有让其他人工作。