2

我正在尝试在 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 版,除了默认安装的钩子外,没有钩子。

4

1 回答 1

1

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

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

这种对尾随空格的检查甚至不再包含在示例预提交挂钩中,可能是因为它非常脆弱。

于 2011-04-15T20:57:34.057 回答