Git提交在不存在的行上的尾随空格上停顿

时间:2010-12-08 16:04:49

标签: git whitespace git-commit

我正在尝试在Git中进行提交,但收到以下错误:

$ git commit -m "Changed model name from Employee to Person for abstraction"
*
* You have some suspicious patch lines:
*
* In app/helpers/people_helper.rb
* trailing whitespace (line 28)
app/helpers/people_helper.rb:28:
* trailing whitespace (line 44)
app/helpers/people_helper.rb:44:

精细。我将删除空格。唯一的问题?那些线不存在。

$ cat app/helpers/people_helper.rb
module PeopleHelper
end
$ 

该文件只有两行。 28号线和44号线上不能有空白区域。

是什么给出了?

我使用的是Git版本1.5.4,没有挂钩,除了默认安装的挂钩。

1 个答案:

答案 0 :(得分:1)

Git 1.5.4是Git的旧版本(自2008年2月起);我建议你更新到更新的版本。较新的版本(因为1.6,我相信)默认情况下不启用示例挂钩(我相信默认情况下旧版本不应启用示例挂钩,但它是通过禁用可执行位来完成的,有时会意外地获取在某些平台上设置;现在通过命名它们.sample来完成,所以Git在重命名之前甚至不会查看它们。请注意,如果您升级,所有现有的存储库仍然会有旧的挂钩,因此您必须手动禁用它们(将.git/hooks中的所有内容重命名为.sample),或者只是克隆你的回购新鲜的,以获得新的存储库,没有遗留旧垃圾。

关于你的确切问题,我不完全确定没有更多信息为什么它会发生(git-diff-index -p -M --cached HEAD的输出可能会有帮助),但这可能是因为示例钩子检查尾随空格的方式是通过生成一个补丁,然后解析补丁,寻找差异标题来获取文件名,使用diff线号来计算线,以空格开头的行来计算未更改的行,以及以{{1}开头的行找到更改的行。如果某些东西设法混淆了这个相当简单的补丁解析器,那么它报告的错误的文件名和行号可能会完全错误。

对尾随空格的这种检查不再包含在样本预提交钩子中,可能是因为它有多么脆弱。