使用Git blame命令获取两个日期之间的列表

5
Git 提供了 --since 选项。
git blame --since=3.weeks -- foo

有没有一种方法可以获得两个日期之间的责任列表?
也就是说:类似于git log --since--until

1个回答

2
类似于 git log 的 since 和 until。
这个在2017年讨论过
首先,git blame 接受选项并将其传递给 git rev-list,以限制用于责备的提交。
git rev-list 确实有:
-until=<date>
--before=<date>

显示早于特定日期的提交记录。
因此,这些选项在git blame下没有记录,但在git rev-list下有记录。
但是:git blame忽略这些选项。
也就是说,git blame --since=3.weeks --before=2.weeks -- foo不会报错,但是会悄悄地忽略--before=2.weeks部分。
Junio C Hamano评论(关于提交,但这也适用于日期):

Many options that rev-list takes are parsed but then ignored by blame, simply because they do not make much sense in the context of the command, and "--before" is one of them.

It is interesting to realize that "--since" (and its synonym "--after") does make sense, unlike "--before" (and its synonym "--until") which does not.

Let's imagine a history like this (time flows from left to right):

--c1--c2--c4--c6--c8--c9
        \         /
         c3--c5--c7

where the tip of the history is at commit "c9", and the number in the name of each commit denotes its timestamp.

  • "git rev-list c9" starts from "c9", and follows the chain of parents and would produce c9, c8, c7, c6, ..., c1, ....

  • If you add "--after 2", i.e. "git rev-list --after 2 c9" does exactly the same traversal as the above, but stops following the chain of parents for commits that is earlier than the specified time.

  • If you add "--before 6", i.e. "git rev-list --before 6 c9" does exactly the same traversal as the first one, but does not show the commit whose timestamp is later than the specified time.
    It would be like saying "git rev-list c5 c6" in the above topology; the traversal from c9 down to c5 and c6 is done only to find c5 and c6 to start the "real" traversal from.

Now, "--after 2" will still show "c9", the tip you start your traversal from, and this is important in the context of "blame".

Unlike "git rev-list" (and "git log" family of commands), which can take more than one positive endpoints in the history (e.g. it is perfectly sensible to ask "git log -p ^c1 c5 c6 -- myfile" in the example topology above), "git blame" must be given exactly one positive endpoint, as "git blame ^c1 c5 c6 -- myfile" would not make any sense (ask: "do we want to know about myfile in c5? or myfile in c6?").


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接