Git错误:“fatal:corrupt patch at line 36”

mm9b1k5b  于 2023-06-20  发布在  Git
关注(0)|答案(8)|浏览(809)

我有一个Java文件,它的结尾是这样的:

}
}

前段时间我错误地删除了末尾的换行符,但直到今天我在提交时从Git-GUI得到一条错误消息,一切都很好

fatal: corrupt patch at line 36

我尝试添加缺少的换行符,但Git似乎无法正确处理它:
添加换行符之前:

}
 }
\ No newline at end of file

添加换行符后:

}
-}
\ No newline at end of file
+}

它仍然给我这个错误。
我尝试恢复更改,只添加新行,而不对文件进行其他更改,但也无济于事。

    • 编辑:**添加两个甚至三个换行符也没有帮助。
    • EDIT2:**仅当提交最后一个区块内的行时才会出现此错误。
ykejflvf

ykejflvf1#

这是在编辑'-'行时发生的。

当您删除'-'并忘记添加' '(空格)而不是它

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

更新

您的编辑器也可能具有以下选项:“删除行尾的空格”。因此,当您在编辑器中保存补丁时:

-Line with space at end <--- NOTICE: Here there is one space at the end
+Line with no space at end<--- Here there's 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 <---

UPD

有时你想删除-行。你可以通过修改空格来改变它。所以这不起作用(这里只是将空格作为第一个字符):
要解决这个问题,只需在它后面添加+行:

-
+

此补丁将删除空行并重新添加

zd287kbt

zd287kbt2#

另一个潜在的问题,尤其是在使用常规文本编辑器进行编辑时,无法处理块开头的数字,这些数字表示旧代码中有多少行,新代码中有多少行,以及每个代码中的起始位置。如果数字不匹配,则会出现fatal: corrupt patch at line x错误。
例如,@@ -32,9 +54,15 @@告诉它查找原始文件中第32行和接下来9行要替换的代码,但在编辑后的文件中,从第54行开始有15行。如果您添加或删除任何行,您还必须编辑这些数字。
虽然我没有做过任何真实的的研究,也没有使用过git gui,但可以想象,因为根据某些标准,不以换行符结束的行在技术上不是行,所以你需要将其中一个或两个数字都更改一个,以使其正确应用。

ljo96ir5

ljo96ir53#

commit不对补丁执行任何操作。它甚至没有对内容做任何事情。提交只格式化树和提交对象,并调整HEAD和它所指向的ref。所以不是提交本身导致了这个错误。
它也不是add,因为当它对新文件内容进行散列时,它对新内容进行操作,并且根本不关心差异。
唯一关心差异的是默认的预提交钩子,它检查您没有添加尾随空格和一些类似的问题。您可以通过调用git commit --no-verify跳过该检查。但你必须首先启用它,你可能会知道它。

0ve6wy6x

0ve6wy6x4#

我刚刚遇到了一个类似的问题(可能是由于git gui的工作原理),这可能对任何拥有它的人都很有用。
当通过git add -e pom.xml修补我的pom.xml时,修补程序如下所示。

diff --git a/pom.xml b/pom.xml
index 3dba69a..a9c8ebb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,26 +1,48 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>adowrath</groupId>
     <artifactId>project-name</artifactId>
     <version>0.0.1</version>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
         <testSourceDirectory>src/test/java</testSourceDirectory>
         <plugins>
             <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>3.6.1</version>
                 <configuration>
                     <source>1.8</source>
                     <target>1.8</target>
                 </configuration>
             </plugin>
             <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <version>0.7.9</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>prepare-agent</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>report</id>
+                        <phase>test</phase>
+                        <goals>
+                            <goal>report</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <version>2.16</version>
                 <configuration>
                     <includes>
                         <include>**/Test*.java</include>
                         <include>**/*Test.java</include>
                         <include>**/*Tests.java</include>
@@ -32,9 +54,15 @@
     </build>
     <dependencies>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>4.12</version>
         </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <version>2.5.5</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>

我想删除最后一个Mockito依赖块。如果我只是删除行本身,它总是给我一个错误报告到第64行:

fatal: corrupt patch at line 64
fatal: Could not apply '.git/ADD_EDIT.patch'

第64行是补丁文件中的最后一行,所以 after<project>这一行。
解决方案是简单地删除整个 Backbone.js ,所以从@@-行向下的所有内容,它立即工作。
希望这能帮上忙。

vaj7vani

vaj7vani5#

我也遇到了同样的问题,最后我明白了这是什么。我的一些行用制表符而不是空格缩进。在将所有缩进更改为空格后,它工作了。

biswetbf

biswetbf6#

我想删除最后一个Mockito依赖块。
如果我只是删除行本身,它总是给我一个错误报告到第64行:

fatal: corrupt patch at line 64
fatal: Could not apply '.git/ADD_EDIT.patch'

现在(2019年第一季度),你应该不会在Git 2.21+中看到这种错误,因为在2.21之前,当“git add -e”想要让用户编辑的更改小于临时文件中遗留的先前更改时,它会感到困惑。

add --edit:截断修补程序文件

如果已经有一个.git/ADD_EDIT.patch文件,我们不能正确地截断它,这可能会导致非常有趣的错误。
当然,这个文件不应该被到处乱放。
但至少在一种情况下,有一个陈旧的副本,大于当前的差异。所以结果是一个损坏的差异。
让我们在写文件的时候截断它,不要太担心它。

zlhcx6iw

zlhcx6iw7#

不是直接回答你的问题,但我只是在运行git apply something.diff时遇到了这个错误,解决方案与你的描述非常相似,我认为应该在这里发布给未来的旅行者:something.diff的结尾没有空行。显然最后一行对git来说很重要,我一添加它它就工作了。

au9on6nz

au9on6nz8#

好的,抱歉没有仔细检查。
我试着像往常一样添加和提交,但没有Git-GUI,使用命令行,它工作了。
因此,我建议每个人都有问题的Git-GUI不要像我这样做,并检查它通过命令行之前发布。

相关问题