Ошибка 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>
.
решение состояло в том, чтобы просто удалить весь ствол, поэтому все от @@-линии вниз, и это сработало немедленно.
надеюсь, это поможет.