如何在git gui中逐行登台,尽管“文件末尾没有新行”警告

时间:2012-11-04 23:01:25

标签: git newline git-gui git-index line-by-line

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

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

Git Gui

问题

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

  

错误:致命:第11行腐败的羊皮纸。

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

重现问题的步骤

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

    我想知道Git是否有一些配置允许我绕过这个问题。一些自动化,例如添加所需新行的钩子也可以。

    错误报告

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

2 个答案:

答案 0 :(得分:5)

感谢Heiko Voigt,该行为有一个错误修正。我们在Git-Merge conference修复此问题 - 感谢GitHub组织此活动。该补丁目前正在邮件列表中待处理。一旦它被合并和发布,我将在这里更新这篇文章。


最后,gitgui-0.18.0已合并到git v1.8.4,并且是官方发布的一部分(2013年8月23日)。现在每个人都可以享受分段行提交,无论文件末尾有新行。再次感谢Heiko!

答案 1 :(得分:3)

我找到了一个预提交挂钩来处理问题。但是,它不是完美的解决方案,因为修复程序适用于实际提交文件之前。我为脚本创建了一个要点,如果你想改进它,你可以修改它。

original script was posted by Matt Baker。我将其缩小为添加新行的事实,但也包括删除尾随空格的例程。然而,有一个变化涉及换行符:我添加\n与马特的推荐相反。

问题案例:

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


此外,我发现这个讨论如何integrate hooks into multiple repositories非常有趣。在设置自己的钩子时,你可能想看看这个。