代码之家  ›  专栏  ›  技术社区  ›  Bjorn

为什么Git关心在我的文件中跟踪空白?

  •  32
  • Bjorn  · 技术社区  · 15 年前

    不管我用什么样的录像机来担心我把什么放在我的文件里,这是什么生意?我不明白这是什么意思。是Git版本控制还是语法检查器?

    6 回复  |  直到 9 年前
        1
  •  31
  •   Brian Campbell Dennis Williamson    15 年前

    这是因为Git最常见的用途之一是通过电子邮件发送补丁系列。尾随空格会给电子邮件带来麻烦,因此通常会被删除,这意味着在通过电子邮件发送补丁并应用补丁的过程中,任何尾随空格都会丢失。这反过来意味着,如果repo中的行上有尾随空格,但应用的修补程序中没有尾随空格,则在应用修补程序时,可能会出现虚假冲突,或者出现不预期的额外更改。

    这个预提交钩子在默认情况下是启用的,但不再是 . 我好像记错了; it was never deliberately enabled by default . 正如其他人所指出的,这一直是一个预提交钩子示例;它以前是通过不给它执行位而被禁用的,但这是一个相当容易被搞砸的东西(例如,在Windows上的cygwin下运行),所以在较新版本的git中(自 over a year ago )已通过命名禁用示例 pre-commit.sample . 您可以删除或移动 .git/hooks/pre-commit 如果您不喜欢这个行为,可以防止这个钩子执行。你也应该更新你的Git到更新的东西,因为这已经被修复了一段时间。

        2
  •  11
  •   hobbs    15 年前

    Git一点也不在乎。这个 例子 预提交钩子会进行空白检查,以演示如何编写钩子,但它不是 启用 默认情况下,您必须使它成为可执行的,才能执行任何操作。

        3
  •  4
  •   Jakub Narębski adamtaub    15 年前

    为什么?因为后面的空白很容易丢失,导致虚假的更改和未应用的补丁(因为空白的更改)。这是一个符合 程序设计风格 .

    也就是说这是一个 pre-commit hook :您可以编辑它,或者禁用它,或者配置尾随空格(可能仅适用于某些类型的文件),使其不被视为错误。


    这个 预提交 钩子应该是 残疾人 默认情况下 ,但用于安装它们的旧版本(1.6.0之前的版本)通过关闭可执行权限来关闭,这可能在非UNIX文件系统(如fat)上不起作用;从1.6.0开始,它们通过附加“.sample”后缀来关闭(禁用)安装。

        4
  •  3
  •   Phil    15 年前

    正如霍布斯所写,样本预提交钩子可能正在检查后面的空白。要禁用它,请查看 .git/hooks 确保文件不可执行。

    钩子启用的一种可能的方法是,如果您在一个胖格式的闪存驱动器上移动repo,则可能已经设置了可执行位。

        5
  •  1
  •   Walinton Cambronero    9 年前

    您可以使用--no verify开关绕过这个问题,请参见 http://git-scm.com/docs/githooks

        6
  •  0
  •   YuriAlbuquerque    12 年前

    这不是风投想告诉你什么是好的编程风格的问题。尾随空格对他们来说是一件坏事,这是一个问题,因为尾随空格被风投视为无用的修改。

    怎么会这样?

    想象你有一条这样的线:

    puts "Hello World"^M^M^M
    

    其中每个“^m”都是一个尾随空格(放在这里简化)。

    另一个开发人员意外地将此更改为:

    puts "Hello World"^M^M
    

    风投们会认为这是一种改变。一个完全不干扰代码的无用代码,只是一个更改。这种变化甚至可以被风险投资公司认为是一种冲突(这是应该尽可能避免的事情)。此外,它毫无必要地污染了你的历史。