【问题标题】:How to stage line by line in git gui although "No newline at end of file" warning尽管“文件末尾没有换行符”警告,如何在 git gui 中逐行分段
【发布时间】:2012-10-24 19:15:35
【问题描述】:

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

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

问题

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

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

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

重现问题的步骤

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

请求

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

错误报告

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

【问题讨论】:

  • 这确实是 git-gui 的错误报告。这个问题应该只发生在文件中的最后一块。正在发生的事情是,当您暂存线路时,git-gui 会构建一个补丁,然后通过“git apply”应用它。在这种情况下,我们需要删除最后一行并用换行符重新添加它,并将“\ 文件末尾没有换行符”标记作为上下文。这一切都发生在 lib/diff.tcl apply_range_or_line 中。这不是微不足道的,但应该是可以修复的。
  • 我同意:如果这个问题可以在 git gui 中修复就好了。不过,我不知道其他 UI 工具是否会遇到同样的问题。

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


【解决方案1】:

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


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

【讨论】:

  • @Ikraav 我想你是我注意到的第一个真正关心这个错误的人。不过,我很期待错误修复版本的发布。
  • 我们目前正在做一些(诚然过度)集中式 git 的东西,远程运行 git gui 以供各种用户提交他们的工作。这个虫子已经让我们恼人地咬了一段时间。今天是个好日子,这就是我要说的一切:)
  • @Ikraav 我很高兴我让你的一天过得愉快 :)
【解决方案2】:

我找到了一个 pre-commit hook 来解决这个问题。不过,这并不是完美的解决方案,因为直到您真正提交该文件才适用该修复程序。我为脚本创建了一个要点,因此如果您想改进它,可以对其进行修改。

original script was posted by Matt Baker。我将其简化为添加新行,但还包括删除尾随空格的例程。然而,换行符有一个变化:我添加了\n,这与马特的建议相反。

问题案例:

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


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

【讨论】:

    猜你喜欢
    • 2010-09-09
    • 2011-03-16
    • 2019-01-28
    • 2014-10-08
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2011-12-31
    相关资源
    最近更新 更多