5

我使用git gui来选择要为提交暂存的行。这通常像一个魅力。我知道在命令行上执行相同操作的选项。

每当文件最初在文件末尾没有新行时,git gui会识别这一点并在编辑器中附加一条警告消息,如屏幕截图所示。

吉特桂

问题

缺少换行符导致的问题是不能再暂存和提交单独的行。当我右键单击以选择特定行并Stage line for commit从上下文菜单中选择时,会弹出一条错误消息。

错误:致命:第 11 行的损坏的 parch。

该问题并非特定于操作系统,可以在 Windows、MacOSX 和 Linux 上重现。我知道如果我在文件中添加一个新行并在继续选择单独的行之前提交这个版本,我可以避免这个问题。

重现问题的步骤

  1. 初始化一个新的存储库。
  2. 创建一个包含三行内容的文件,每行都带有单词“Hallo”。不要在文件末尾添加新行。
  3. 添加并提交文件。
  4. 编辑同一个文件,将单词放在三行之间。
  5. 打开git gui并尝试逐行进行更改。

要求

我想知道 Git 是否有一些配置可以让我规避这个问题。一些自动操作,例如添加所需新行的钩子也可以。

错误报告

我向 Git 邮件列表发送了一个错误报告。您可以在此处关注并参与讨论。

4

2 回答 2

5

感谢Heiko Voigt,该行为有一个错误修复。我们在Git-Merge 会议上解决了这个问题——感谢 GitHub 组织了这个。该补丁目前正在邮件列表中等待处理。一旦它被合并和发布,我就会在这里更新这篇文章。


最后,gitgui-0.18.0已合并到git v1.8.4中,并且是正式版本的一部分(2013 年 8 月 23 日)。现在,无论文件末尾是否有新行,每个人都可以享受逐行提交的乐趣。再次感谢海科!

于 2013-05-10T08:29:09.127 回答
3

我找到了一个预提交钩子来解决这个问题。虽然,它不是完美的解决方案,因为该修复直到您实际提交文件才适用。我为脚本创建了一个要点,所以如果你想改进它,你可以修改它。

原始脚本由 Matt Baker 发布。我将其简化为添加新行的事实,但还包括删除尾随空格的例程。然而,换行符有一个变化:我添加了\n与马特的建议相反的内容。

问题案例:

我在git rebase工作流程中使用了该脚本。这导致 git 更改所有具有尾随空格的文件。这导致了巨大的差异。因此,我建议考虑使用脚本。


此外,我发现这个关于如何将钩子集成到多个存储库中的讨论非常有趣。在设置自己的钩子时,您可能想研究一下。

于 2012-11-06T11:56:31.920 回答