1

revs-file参数的格式是什么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~50HEADHEAD~50

4

1 回答 1

1

如果每一行都归因于最新的提交,这意味着每一行实际上都在最新的提交中被触及。

通常,当有人将每一行从单个换行符更改为 CR/LF 对时,就会发生这种情况,反之亦然。

啊哈,如果没有 ,上述内容将是正确的-S,但是-S对于 ,意味着git blame移植物插入提交图中。

这是一个旨在与 cvsserver 一起使用的特殊功能(根据评论),但它不适用于您使用它的方式。

格式只是一系列的<commit-ID> <parent-ID> ...\n行。因为,在这种情况下,您希望在 开始并git blameHEAD停止HEAD~50,我们可以这样做:

git rev-parse HEAD~50 | git blame -S /dev/stdin $file

输出 commit的git rev-parseSHA-1 HEAD~50,没有额外的行,这使得该提交没有父提交,这使得git blame在该点停止历史遍历。

(您用来提供-S输入的命令git rev-list HEAD~50 HEAD,列出了从从可访问的每个提交,作为单个提交 ID,省略了父项。这与, 因为它本身可以从 访问。因为这列出了没有父项的每个提交IDs,这使得每个提交都被视为根提交。然后它从提交开始,试图找到它的父母,被认为是根提交,然后停在那里——这使得该提交对每个源代码行负责。换句话说,通过列出提交 ID,您必须停在那里。这就是我们想要列出的原因,而不是。)HEAD~50 HEADgit rev-list HEADHEAD~50HEADgit blameHEADHEADHEADgit blameHEAD~50

于 2015-09-24T18:14:57.447 回答