因此,git trailers(https://git-scm.com/docs/git-interpret-trailers)通过“折叠”来支持多行trailer,这意味着后续行以一个空格开始,以表示它们仍然属于当前trailer。
文档中写道:
当阅读预告片时,在标记、分隔符和值之后可以有空格。标记和值内部也可以有空格。值可以被拆分为多行,每一行都以空格开头,就像RFC 822中的“折叠”一样。
我的问题是,如果这样的多行结尾包含空行,git interpret-trailers --parse
就会失败。
我试图添加一个包含一个或多个空行的trailer。这些空行是正确折叠的,但是,它们包含一个空格(所以这相当于添加到提交头的PGP签名,其中也包含一个空行,但是折叠)
但是如果我这样做,git interpret-trailers --parse
就什么也不输出。
$ echo "Test" > test.txt
$ git interpret-trailers --where end --if-exists addIfDifferent --trailer "SingleLineTrailer: This is a single line trailer" --in-place test.txt
$ git interpret-trailers --where end --if-exists addIfDifferent --trailer "MultiLineTrailer: This is"$'\n a folded multi-line\n trailer' --in-place test.txt
test.txt的内容现在是:
$ cat test.txt
Test
SingleLineTrailer: This is a single line trailer
MultiLineTrailer: This is
a folded multi-line
trailer
并且解析工作正常(它将多行解析为一行,这是意料之外的,但至少做了一些事情):
$ git interpret-trailers --parse test.txt
SingleLineTrailer: This is a single line trailer
MultiLineTrailer: This is a folded multi-line trailer
然而,现在我添加了一个包含一个自由行的多行预告片(但是使用空格正确折叠):
$ git interpret-trailers --where end --if-exists addIfDifferent --trailer "MultiLineTrailer: This is"$'\n a folded multi-line\n trailer which\n \n contains an\n empty line' --in-place test.txt
如所预期的,其导致以下内容:
$ cat test.txt
Test
SingleLineTrailer: This is a single line trailer
MultiLineTrailer: This is
a folded multi-line
trailer
MultiLineTrailer: This is
a folded multi-line
trailer which
contains an
empty line
但是,运行git interpret-trailers --parse
不会导致任何输出(但退出代码为0):
$ git interpret-trailers --parse test.txt
$ echo $?
0
git版本为git version 2.30.0.windows.2
那么,这是git中的一个bug,还是这种行为是预期的?
1条答案
按热度按时间4smxwvx51#
这在Git邮件列表线程中被标记为“不会修复”/“不是bug”。
上下文
OP最终向Git邮件列表提交了一个bug report。
一个quick patch被提出作为一个修复的问题.但随后滨野pointed out,提出的修复增加了复杂性.
Christian Couder不想放松当前的blank-line-before-trailers规则:
所以我觉得预告片不应该出现空行,如果出现了,就意味着预告片应该从最后一个空行开始,这可能已经放松了一点。
帖子中的两封终端邮件之一是Hamano的,并间接得出结论,这不是一个bug:
下一步是找出该段中对当前行为的描述中是否有任何不清楚的地方,这些地方可能导致报告的“bug”被证明是非bug。