'git log -<number> --pretty="format:%H"' 输出在通过管道传输到 'cat -e' 时不会附加换行符

问题描述 投票:0回答:1

我正在创建一个 shell 脚本,用于显示 git 存储库最后 5 次 git 提交的提交 ID。

脚本文件的名称:'git_commit.sh' 我所说的“提交 ID”是指完整的 40 个字符的十六进制字符串。 我所说的 git 存储库是指当前分支。

我期望的输出:

yossi@hostname$ bash git_commit.sh | cat -e
42dfd4bdba4646b28136c4b0d71f76ae352aac10$
63a7f8e9e7f5ab2f29c4227440d78fc731201b89$
57361b98c8cb9041759461093ed38b7b8930e12e$
a05251da02f6c677f38f3ab68c95b2dd8812a822$
d17402aa3e3835e1b9e444482cda233e97e032d6$
yossi@hostname$

在'git_commit.sh'中插入的命令:

git log -5 --pretty="format:%H"

这是运行脚本时得到的输出:

yossi@hostname$ bash git_commit.sh | cat -e
42dfd4bdba4646b28136c4b0d71f76ae352aac10$
63a7f8e9e7f5ab2f29c4227440d78fc731201b89$
57361b98c8cb9041759461093ed38b7b8930e12e$
a05251da02f6c677f38f3ab68c95b2dd8812a822$
d17402aa3e3835e1b9e444482cda233e97e032d6yossi@hostname$

问题

  • 第 5 个也是最后一个提交 ID 后面没有尾随 $。
  • 下一个命令提示符之前没有换行符。

这意味着当它通过管道传输到“cat -e”命令时,在第五个也是最后一个提交 ID 之后没有换行符。

我彻底查看了“git log”的手册页,但找不到任何解释该行为的内容。

我测试过的替代方案 我测试了通过以下三个命令替换

git log -5 --pretty="format:%H"

  • git log -5 --format="%H" | cat -e
  • git log -5 --pretty="tformat:%H" | cat -e
  • git log -5 --pretty="%H" | cat -e

“git_commit.sh”中插入的这三个替代命令中的每一个都提供了预期的输出:

yossi@hostname$ bash git_commit.sh | cat -e
42dfd4bdba4646b28136c4b0d71f76ae352aac10$
63a7f8e9e7f5ab2f29c4227440d78fc731201b89$
57361b98c8cb9041759461093ed38b7b8930e12e$
a05251da02f6c677f38f3ab68c95b2dd8812a822$
d17402aa3e3835e1b9e444482cda233e97e032d6$
yossi@hostname$

有人能够解释

git log -5 --pretty="format:%H"
的行为差异吗?

bash shell git-log
1个回答
1
投票

解释在这里:

tformat
:
tformat:
格式的工作方式与
format:
完全相同,只不过它提供“终止符”语义而不是“分隔符”语义。换句话说,每个提交都附加了消息终止符(通常是换行符),而不是在条目之间放置分隔符。这意味着单行格式的最终条目将以新行正确终止,就像“oneline”格式一样。例如:

https://git-scm.com/docs/pretty-formats

请注意,

git log --format="%H"
git log --pretty="%H"
都相当于
--pretty="tformat:%H"

--pretty[=<format>]

--format=<format>

以给定格式漂亮打印提交日志的内容,其中
<format>
可以是
oneline
short
medium
full
fuller
reference
email
之一,
raw
format:<string>
tformat:<string>
。当
<format>
不是以上任何一种,并且其中有
%placeholder
时,它的作用就像给出了
--pretty=tformat:<format>
一样。

https://git-scm.com/docs/git-log#Documentation/git-log.txt---prettyltformatgt

© www.soinside.com 2019 - 2024. All rights reserved.