“致命:在第XX行损坏补丁”时,升级单行

时间:2012-08-27 19:00:34

标签: git git-gui

当我尝试使用git gui(右键单击 - >阶段行进行提交)来演示单行或多行时,我收到以下错误。这不是第一次发生在我身上,我发现其他人正面对它。但是我找不到如何解决它。

有没有人遇到过这个问题?有什么我可以做的(暂存所有文件不是一个真正的解决方案)

更新 这是一个文件,当我尝试暂存已删除的行时,它会给我以下错误。

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/texture"
    android:tileMode="repeat"
-   android:dither="true"
    >
</bitmap>
\ No newline at end of file

以下是错误消息:

fatal: corrupt patch at line 14
奇怪的是以下罚款甚至没有14行!?注意用新行结束文件并没有解决问题

7 个答案:

答案 0 :(得分:44)

显然是Git GUI requires that files end with a newline when staging individual lines

我很确定至少在一个时间点,即使在文件末尾没有换行符,也可以暂存各行,但显然已经不再可能了。我自己遇到了这个问题,在文件末尾有换行符修复它,然后删除它会导致它。

答案 1 :(得分:13)

实际上,当您编辑' - '行时,通常会发生这种情况 当您删除' - '并忘记添加''(空格)而不是

或者,错误地,您添加了两个空格,并使用“标签”作为标识

打开你的补丁并检查你想要保持不变的所有行是以''(一个空格)开头的

我看到有些人使用--ignore-space-change --ignore-whitespace --whitespace=fix作为解决方法,但这是另一件你不能混淆的事情。

打开你的补丁并检查你想要保持不变的所有行都以''(空格)开头

<强> UPD

您的编辑器也可以选择:“删除终点处的空格” 所以,当你在编辑器中保存补丁:

-Line with space at end <--- NOTICE: Here one space at the end
+Line with no space at end<--- Here no space

你的编辑器删除尾随空格和补丁变成这样:

-Line with space at end<--- Here no space. Patch will FAIL!!!
+Line with no space at end<--- Here no space also

此补丁将失败,因为源文件没有行:

-Line with space at end<---

它有:

-Line with space at end <--- 

<强> UPD2

所以,如果在下一行的补丁中

android:tileMode="repeat"

你的编辑删除了训练空间。补丁将失败

答案 2 :(得分:2)

当您使用的块太大(即修改了太多连续行)时,Git GUI无法在索引中添加/删除行。

我的解决方法:如果更改不是“粉红色的墙”(如果在块的中间有一些未修改的行),请转到编辑&gt;选项并减少差异上下文中的行数。如果这不起作用,你就搞砸了;使用其他工具(例如命令行)。

答案 3 :(得分:1)

我在分享帅哥时遇到了这个错误。

这里提到的“空白”提醒我,在我的git diff选项中,我有“-w”,它在跳跃时会跳过白色空间。

我删除了那个标志(使用git-gui的“选项......”),并且能够在没有错误的情况下安排好。然后我将其添加回来(因为我通常不希望在检查已更改的内容时看到空格差异。)

不确定这会对您有所帮助,但尝试轻松撤消相当无害。

答案 4 :(得分:0)

受到kyl191答案的启发,我想出了一个解决这个问题的简单方法:

  1. 在文件末尾添加换行符

  2. 存储所有更改

    git stash
    
  3. 再次在文件末尾添加换行符,因此您在当前文件和隐藏版本中都有换行符

  4. 暂存相应的hunk(仅包含换行符)

    git stage <your file>
    
  5. 从藏匿处弹出您的更改

    git stash pop
    
  6. 现在你应该可以通过gui演出单行而不会出现这个错误。这是有效的,因为在你只播放包含部分的换行符后,从stash恢复的版本的差异已经看到一个以换行符结尾的文件。

答案 5 :(得分:0)

我遇到了这个问题,因为我试图在emacs中为我的补丁添加一个换行符,当我保存它时它会再次自动删除换行符。

如果您使用emacs在修补程序的末尾添加换行符,则可能还会将其删除。我打开另一个文本编辑器来添加我的换行符并且它有效。

答案 6 :(得分:-1)

另一个解决方法

阶段整个文件。 取消选择