【问题标题】:Emacs: why shell-command "git log" works, but "git shortlog" doesn't?Emacs:为什么 shell 命令“git log”有效,但“git shortlog”无效?
【发布时间】:2013-11-02 12:36:13
【问题描述】:

我想不通。为什么这些行为不同:

(shell-command "git log")
(shell-command "git shortlog")

第一个按预期工作:返回 0 并将内容打印到 shell 输出缓冲区。 第二个返回 0 但什么也不打印。这是为什么呢?

还有

  1. git loggit shortlogansi-term 中完美运行
  2. git loggit shortlog 都会发出警告,但在 shell 中仍然有效

【问题讨论】:

  • 我认为答案应该是 Git 试图成为自己的文本编辑器,而不是仅仅依靠其他程序来处理日志输出,而是在控制台中随机垃圾“提升”用户体验。幸运的是,到目前为止有一个治愈方法:使用--no-pager 来避免这种废话。
  • 已经试过了 - 不起作用。这很特别。
  • 哦,是的,你是对的,它只适用于shell,但不适用于shell-command。很奇怪。
  • 奇怪的是,这:(shell-command "git --no-pager log --pretty=short") 对我有用,而 shortlog 必须只是写同一件事的简写版本。 . 但它并没有做它应该做的事情,不管怎样,摘要和提交哈希都在那里。
  • 我找到了阅读git help shortlog的原因。显然它想从标准输入中读取一些东西......无论如何,解决方法是(shell-command "git shortlog HEAD")

标签: git shell emacs elisp


【解决方案1】:

man git-shortlog

如果没有通过命令行和任一标准传递修订 输入不是终端或没有 当前分支,git shortlog 会输出从标准输入读取的日志摘要,不参考 当前存储库。

您必须明确提供您的案例的工作参考,

改用git shortlog HEAD

【讨论】:

  • 很棒的答案,非常感谢。节省了我很多时间
  • 很高兴知道它对您有所帮助。
猜你喜欢
  • 2020-12-01
  • 2013-05-16
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多