42

当我尝试使用 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行!?注意用新行结束文件并没有解决问题

4

6 回答 6

46

显然 Git GUI要求文件在暂存单个行时以换行符结尾

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

于 2012-09-22T22:09:43.637 回答
16

实际上,这经常发生在您编辑“-”行时。
当您删除“-”并忘记添加“”(空格)而不是它时

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

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

我看到有些人将--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"

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

于 2015-08-01T12:10:18.457 回答
2

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

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

于 2013-11-05T14:06:19.457 回答
1

我在登台大块时遇到了这个错误。

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

我删除了那个标志(使用 git-gui 的“选项...”),并且能够在没有错误的情况下上演大块头。然后我把它加回来(因为我通常不想在检查发生了什么变化时看到空白差异)。

不确定这会对您有所帮助,但尝试并轻松撤消它是无害的。

于 2017-02-20T22:44:12.267 回答
0

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

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

  2. 隐藏所有更改

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

  4. 阶段相应的大块(只包含你的换行符)

    git stage <your file>
    
  5. 从存储中弹出您的更改

    git stash pop
    

现在您应该能够通过 gui 暂存单行而不会出现此错误。这是有效的,因为在您只上演包含换行符的部分之后,从 stash 恢复的版本的差异已经看到一个以换行符结尾的文件。

于 2014-04-29T13:05:51.513 回答
0

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

如果您使用 emacs 在补丁末尾添加换行符,它也可能会再次将其删除。我打开了另一个文本编辑器来添加我的换行符,它起作用了。

于 2018-03-29T09:48:55.660 回答