我用什么VCS来担心我放入文件的内容是什么生意?我不明白这里的意思。是git版本控制还是语法检查?
答案 0 :(得分:31)
这是因为Git的一个常见用途是通过电子邮件发送补丁系列。尾随空格会导致电子邮件出现问题,因此通常会被删除,这意味着在通过电子邮件发送补丁并应用补丁的过程中,任何尾随空格都将丢失。这反过来意味着如果repo中的行上有尾随空格,但是在应用的补丁中没有,那么在应用补丁时,可能会出现虚假冲突或者非预期的额外更改。
默认情况下,此预提交挂钩已启用,但不再是。我好像错了; it was never deliberately enabled by default。正如其他人所指出的那样,这一直是一个预先提交的样本钩子;过去通过不给它执行位来禁用它,但这可以很容易搞砸(例如,在Windows上的Cygwin下运行),所以在较新版本的Git(自over a year ago)样本中已被命名为pre-commit.sample
而被禁用。如果您不喜欢该行为,可以删除或移动.git/hooks/pre-commit
以防止执行此挂钩。您还应该将Git更新为更新的内容,因为这已经修复了很长一段时间。
答案 1 :(得分:11)
Git根本不关心。 示例预提交挂钩执行空白检查,作为如何编写挂钩的演示,但默认情况下它不是启用;你必须让它可执行它才能做任何事情。
答案 2 :(得分:4)
为什么呢?因为尾随空格很容易丢失,导致虚假更改并且不应用补丁(因为空白更改)。这是符合编程风格的原因。
那说这是pre-commit
hook的问题:您可以编辑它,或者禁用它,或者配置尾部空格(可能只针对某些类型的文件)不被视为错误。
pre-commit
挂钩默认情况下 已禁用 ,但旧版本(1.6.0之前版本)用于安装它们关闭可执行权限关闭,这可能不适用于FAT等非UNIX文件系统;从1.6.0开始,通过附加'.sample'后缀来关闭(禁用)它们。
答案 3 :(得分:3)
正如hobbs写的那样,示例预提交钩子可能正在检查尾随空格。要禁用它,请查看.git/hooks
并确保其中的文件不可执行。
钩子可能已启用的一种可能方法是,如果您在FAT格式的闪存驱动器上移动回购,可执行位可能已设置。
答案 4 :(得分:1)
这不是VCS试图告诉你什么是好的编程风格的问题。尾随空白对他们来说是一件坏事,因为尾随空格可被视为VCS无用的修改。
怎么样?
想象一下你有这样的一句话:
puts "Hello World"^M^M^M
每个" ^ M"是一个尾随的空格(放在那里简化)。
另一位开发人员意外地将此更改为:
puts "Hello World"^M^M
VCS会将此视为一种变化。一个无用的,根本不会干扰代码,而是一个变化。这种变化甚至可以被VCS指出为冲突(这是应该尽可能避免的事情)。此外,它不需要污染你的历史。
答案 5 :(得分:1)
您可以使用--no-verify开关绕过此功能,请参阅http://git-scm.com/docs/githooks