Ошибка Git: "фатальный: поврежденный патч в строке 36"

у меня есть файл Java, который заканчивается так:

    }
}

и я ошибочно удалил новую строку в конце некоторое время назад, но это было нормально до сегодняшнего дня, когда я получил сообщение об ошибке от Git-GUI при фиксации

fatal: corrupt patch at line 36

Я попытался добавить недостающую новую строку, но Git, похоже, не может справиться с этим правильно:

перед добавлением новой строки:

     }
 }
 No newline at end of file

после добавления новой строки:

     }
-}
 No newline at end of file
+}

и это все еще дает мне, что ошибка.

Я попытался вернуть изменения и добавить только новую строку без других изменений в файл, но это тоже не помогло.

EDIT: добавление двух или даже трех новых строк тоже не помогает.

EDIT2: эта ошибка возникает только при фиксации строк в пределах последнего куска.

4 ответов


это происходит, когда вы редактируете строки' -'.
когда вы удалите '-' и не забудьте добавить '' (пробел) вместо

откройте патч и убедитесь, что все строки, которые вы хотите оставить нетронутыми, начинаются с '' (пробел)

обновление

также возможно, что ваш редактор имеет опцию: "Удалить пробелы в конце строки". Итак, когда вы сохраняете патч в своем редакторе:

-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 <--- 

commit ничего не делает с патчами. Он даже ничего не делает с их содержанием. Фиксация только форматирует дерево и объекты фиксации и настраивает головку и ref, на которые она указывает. Таким образом, это не самоотверженность, которая дает эту ошибку.

- Это не add либо, потому что, хотя он хэширует новое содержимое файла, он работает с новым содержимым и не заботится о различиях вообще.

единственное, что заботится о различиях, - это значение по умолчанию предварительная фиксация крючка, который проверяет, что вы не добавляете конечные пробелы и несколько подобных проблем. Вы можете пропустить эту проверку, позвонив git commit --no-verify. Но вы должны были включить его в первую очередь, и вы, вероятно, знаете это.


хорошо, извините, что не проверил его тщательно.

Я попытался добавить и зафиксировать, как обычно, но без Git-GUI, используя командную строку, и это сработало.

и поэтому я бы рекомендовал всем, у кого есть проблемы с Git-GUI, не делать так, как я, и проверить его через командную строку перед публикацией.


у меня просто была аналогичная проблема (вероятно, равная из-за работы Git gui) к этому, что может быть полезно для тех, у кого она есть.

при латании моего помпона.xml через git add -e 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 является последней строкой в файле патча, поэтому строка после <project>.

решение состояло в том, чтобы просто удалить весь ствол, поэтому все от @@-линии вниз, и это сработало немедленно.

надеюсь, это поможет.