【问题标题】:What plumbing command provides the same functionality as git log --follow?哪个管道命令提供与 git log --follow 相同的功能?
【发布时间】:2015-05-28 04:06:30
【问题描述】:

为了提高稳定性,我目前正在重构所有与 Git 相关的 shell 脚本,以便它们仅使用 plumbing(而不是 porcelain)命令。特别是,我试图用对git rev-list(管道)的调用来替换对git log(瓷器)的调用。

然而,尽管git rev-list 似乎提供了git log 的大部分功能,但它似乎缺少与git log--follow 标志等效的选项,该标志告诉Git 列出影响路径的提交甚至超越重命名(例如README -> README.md)。来自git log man page

--follow

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

我已经筛选了git rev-list man page,但找不到任何与git log --follow 相同的选项。我错过了什么?可以用git rev-list 完成吗?还是我应该完全使用另一个管道命令?

【问题讨论】:

  • 对于 simple 重命名,也许您可​​以使用 diff-tree 实现您自己的重命名检测版本?
  • @AndrewC 嗯...我宁愿使用现成的东西。

标签: git git-log git-plumbing git-rev-list


【解决方案1】:

不幸的是,--follow 实际上(很差)内置于git log 本身。它以一种特殊的仅文件模式打开重命名检测机制,然后可以找到向后转换(新文件 foo = 旧文件栏)。

(它找不到前向转换,因此如果您使用 --reverse 并命名一个曾经存在的路径,例如,为了查找它变成了什么文件,它就会失败。)

【讨论】:

  • 嗯...这确实很不幸。我的希望破灭了!
  • 顺便说一句,git blame 中使用了相同的代码路径,它自动执行与--follow 等效的操作。所以那里有 pieces... 我不久前去看了使它与 --reverse 一起工作,但它变得毛茸茸的。
  • 谢谢。似乎还有重构的空间。也许我会在邮件列表上放一封电子邮件。但我很好奇......在 Git 项目存储库中运行 git log --author=torek 不会返回任何命中。您是否以其他名义参与其中?
  • 不,我发送给 git 人员的唯一内容是修复了“git stash”,但他们还没有收到。
  • 我在stackoverflow.com/a/20480591/1256452 中有一个到permalink.gmane.org/gmane.comp.version-control.git/234153 的链接(这是一个“可能的”修复,因为我不是一个重度隐藏用户,也许有一些角落情况它无法处理...... )。
猜你喜欢
  • 2016-09-04
  • 2018-03-11
  • 2021-02-24
  • 1970-01-01
  • 2017-07-11
  • 2013-12-05
  • 1970-01-01
  • 2015-06-22
  • 2015-01-04
相关资源
最近更新 更多