什么管道命令提供与git log --follow相同的功能?

4
为了提高稳定性,我正在重构所有与Git相关的shell脚本,使它们仅使用“plumbing”(而不是“porcelain”)命令。特别是,我试图用git rev-list(plumbing)调用来替换对git log(porcelain)的调用。
然而,尽管git rev-list似乎提供了许多与git log相同的功能,但它似乎缺少一个等价于git log--follow标志的选项,该标志告诉Git列出影响路径甚至超出重命名的提交(例如README->README.md)。从git log手册页中可以看到:

--follow

继续列出文件的历史记录,超出重命名(仅适用于单个文件)。

我已经查阅了git rev-list手册页,但我找不到任何与git log --follow相同的选项。我错过了什么?是否可以使用git rev-list完成此操作?还是应该完全使用另一个plumbing命令?

对于简单的重命名,也许你可以使用diff-tree实现自己的重命名检测版本? - Andrew C
@AndrewC 嗯...我宁愿使用现成的东西。 - jub0bs
1个回答

2

很不幸,--follow 实际上是内置于 git log 的(而且实现较差)。它会启用重命名检测机制,并以特殊的单文件模式查找后向转换(新文件 foo = 旧文件 bar)。

(它无法找到前向转换,所以如果你使用 --reverse 并命名一个曾经存在的路径,例如想要查找它变成了哪个文件,它将完全失败。)


嗯...这确实很不幸。我的希望破灭了! - jub0bs
顺便提一下,git blame 中使用了相同的代码路径,它自动执行了等效于 --follow 的操作。所以其中有一些片段... 我前段时间尝试让它与 --reverse 一起工作,但变得非常复杂。 - torek
谢谢你的回复。看起来有重构的空间。也许我会在邮件列表上发一封电子邮件。但是我很好奇...在 Git 项目仓库中运行 git log --author=torek 没有返回任何结果。你是否使用另一个名字参与其中? - jub0bs
不,我只向git团队提交了一个有关"git stash"的修复,他们仍然没有采纳。 - torek
1
我在 https://dev59.com/yWIj5IYBdhLWcg3wPy0a#20480591 中有一个指向 http://permalink.gmane.org/gmane.comp.version-control.git/234153 的链接(这是一个“可能”的修复方法,因为我不是一个繁重的存储用户,也许有一些边际情况它无法处理…)。 - torek
显示剩余2条评论

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