$ echo "$dates" | sed -r 's/([^ ]* [^ ]*) /\1, /g'
2015-09-24 12:05:00, 2015-09-24 12:10:00, 2015-09-24 12:15:00, 2015-09-24 12:20:00
的{{1}}参数的格式是什么?
我尝试使用revs-file
的输出运行它,如下所示,但blame将每一行都归结为git blame -S
提交。
git rev-list
我还尝试运行HEAD
以反转git blame -S <(git rev-list HEAD~50 HEAD) $file
,以防出现问题,但似乎产生相同的输出。
目标是将<(git rev-list ... | tac)
的每一行归咎于revs-file
和$file
之间的提交,如果所有提交中都存在相同的行,则默认为HEAD~50
。< / p>
答案 0 :(得分:1)
如果每一行都归因于最新的提交,这意味着事实上每一行都在最近的提交中被触及。
通常当有人改变从单个换行符到CR / LF对的每一行时,会发生这种情况,反之亦然。
啊哈,上面的内容是没有 -S
,但-S
对git blame
来说意味着插入移植进入提交图。
这是一个特殊功能,旨在与cvsserver一起使用(根据评论),但它不适用于您使用它的方式。
格式只是一系列<commit-ID> <parent-ID> ...\n
行。在这种情况下,您希望在git blame
处开始HEAD
并在HEAD~50
处停止,我们可以这样做:
git rev-parse HEAD~50 | git blame -S /dev/stdin $file
git rev-parse
输出提交HEAD~50
的SHA-1,没有其他行,这使得该提交没有父提交,这使得git blame
停止历史遍历那时候。
(您用于提供-S
输入的命令git rev-list HEAD~50 HEAD
列出每个提交可从HEAD~50
或到HEAD
,仅作为一个提交ID,省略父项。这与git rev-list HEAD
相同,因为HEAD~50
本身可以从HEAD
到达。因为这列出了每个提交没有父ID,这使得git blame
将每个提交视为根提交。然后以HEAD
提交开始,尝试查找其父,将HEAD
视为根提交,并且停在那里 - 这使得该提交对每个源代码行都负责。换句话说,通过列出HEAD
提交ID,你得到git blame
就止了。这就是为什么我们要列出{{{ 1}}。)