某些电子邮件地址似乎包含换行符?

时间:2017-02-01 19:33:50

标签: git

我尝试获取与特定提交相对应的电子邮件地址,并获取:

$git show -s --pretty=tformat:"developer: %ce" b93ff31
developer: someuser@server.com

$git show -s --pretty=tformat:"developer: %ce" 4201b2b
developer: other@site.net
$

因此,第一个提交产生两个换行,第二个只产生一个(来自tformat)。据我所知,它只是来自第一个开发人员(实际上是一个机器人)的提交,它包含这个换行符,但我不知道它来自哪里。 .gitconfig文件看起来很好:

[user]
        name = Bot
        email = someuser@server.com
[color]

没有尾随空白,并使用unix换行符保存,与其电子邮件不生成换行符的其他用户相同。如果我尝试用.mailmap替换电子邮件,我会收到新电子邮件,但仍然是额外换行符。可能是什么原因以及如何避免它?也许不同的git版本(使用1.8.3.1生成带有额外换行符的提交,带有1.9.1的那些没有换行符。)

2 个答案:

答案 0 :(得分:4)

看起来这是一个错误:

  

用于错误发射的“git show -s”(即仅显示日志消息)      合并提交后的额外空行。      (合并ad2f725 mk / show-s-no-extra-blank-line-for-merges稍后合并)。

https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.1.0.txt

$(document).ready(function(){ var c = $('.customer_country'); var reg = new RegExp('swi','gi'); c.filter(function(){ return reg.test(this.innerHTML); }).each(function(){ $('ul').append("<li>Item with ID " + this.id + " Matched</li>"); }); }); 恰好是合并提交吗?

我有Git版本2.11.0并且在此版本的开发人员行之后还有一个额外的换行符...所以也许一个“功能”不断被重新引入?

答案 1 :(得分:2)

提交内部的电子邮件地址不能包含换行符,因为提交内部格式是一系列换行符分隔的行,第一个空行(相邻的一行换行符)分隔Git来自主题和正文(用户定义)区域的保留标题区域。但是,它可能包含一个会导致显示屏向下移动的字符。

您可以查看提交对象b93ff31的原始内容,

$ git cat-file -p b93ff31 | vis -lt
例如,假设你有vis;或使用其他一些你知道会向你展示的观众#34;奇怪的东西&#34;。例如,这是Git Git仓库中提交的内容:

$ git cat-file -p HEAD | vis -lt
tree 52060094c97b5ecff0a60e738c858dc8079fc01a\$
parent 3c4ce8e69b4838efce72d090b85bbbbb6eacc5bc\$
parent b32fe956d0d8d601e2dc915d96e14d8bbdda6b71\$
author Junio C Hamano <gitster@pobox.com> 1485898499 -0800\$
committer Junio C Hamano <gitster@pobox.com> 1485898499 -0800\$
\$
Sync with maint\$
\$
* maint:\$
  Ready for 2.11.1\$

请注意,authorcommitter行中嵌入的换行符将结束该行并开始新记录,从而留下错误的行。在任何情况下,它都不会作为%ce的一部分出现。

这种明显换行的来源对我来说是一个谜。找到行为像,但不可能是新行的神秘人物,或许?在任何情况下,请注意git commit在使用配置的$GIT_COMMITTER_EMAIL值之前,在环境中使用git -c user.email=expr,如果已设置,或user.email中的任何值。