私は次のように終わるJavaファイルを持っています:
}
}
そして、しばらく前に最後に誤って改行を消去してしまいましたが、コミット時にGit-GUIからエラーメッセージが表示される今日までは問題ありませんでした
fatal: corrupt patch at line 36
不足している改行を追加しようとしましたが、Gitはそれを正しく処理できないようです:
改行を追加する前に:
}
}
\ No newline at end of file
改行を追加した後:
}
-}
\ No newline at end of file
+}
そしてそれはまだ私にそのエラーを与えます。
変更を元に戻して、ファイルに他の変更を加えずに改行のみを追加しようとしましたが、どちらも役に立ちませんでした。
EDIT: 2つまたは3つの改行を追加しても、役に立ちません。
EDIT2:このエラーは、最後のハンク内の行をコミットするときにのみ発生します。
よくチェックしなくてごめんなさい。
通常どおりに追加とコミットを試みましたが、Git-GUIを使用せずに、コマンドラインを使用して機能しました。
そのため、Git-GUIに問題がある場合は、私と同じようにしないで、投稿する前にコマンドラインで確認することをお勧めします。
これは、「-」行を編集するときに発生します。
'-'を削除し、代わりに ''(スペース)を追加するのを忘れた場合
パッチを開き、そのままにしておきたいすべての行が ''(スペース)で始まっていることを確認します
[〜#〜] update [〜#〜]
エディタに「行末のスペースを削除する」オプションがある可能性もあります。したがって、パッチをエディタに保存すると、次のようになります。
-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
Originファイルに行がないため、このパッチは失敗します。
-Line with space at end<---
代わりに:
-Line with space at end <---
commit
はパッチに対して何もしません。それは彼らのコンテンツでさえ何もしません。コミットは、ツリーとコミットオブジェクトのみをフォーマットし、HEADとそれが指す参照を調整します。したがって、このエラーを発生させるのはコミット自体ではありません。
add
でもありません。これは、新しいファイルコンテンツをハッシュしている間、新しいコンテンツを操作し、違いをまったく気にしないためです。
違いを気にする唯一の考えは、末尾の空白やいくつかの同様の問題を追加していないことを確認するデフォルトのpre-commitフックです。 git commit --no-verify
を呼び出すと、そのチェックをスキップできます。しかし、そもそもそれを有効にする必要があり、おそらくそれを知っているでしょう。
私はこれと同じ問題を抱えていました、そしてついにそれが何であるかを理解しました。一部の行は、スペースではなくタブでインデントされていました。すべてのインデントをスペースに変更した後、それは機能しました。
別の潜在的な問題は、特に通常のテキストエディターを使用して編集する場合、ハンクの先頭にある数字を処理できないことです。これは、古いコードの行数と新しいコードの行数、および場所を示します。それぞれから始まります。数値が一致しない場合は、fatal: corrupt patch at line x
エラーが発生します。
たとえば、@@ -32,9 +54,15 @@
は、元のファイルの32行目と次の9行で置き換えられるコードを見つけるように指示しますが、編集されたファイルでは、54行目から15行になります。追加または削除した場合どの行でも、それらの番号も編集する必要があります。
私はそれについて実際の調査を行ったことがなく、git guiを使用したこともありませんが、改行で終わらない行は技術的にはいくつかの標準に従って行ではないため、一方または両方を変更する必要があると考えられます。それらの番号を1つずつ正しく適用します。
そして、Mockito依存関係の最後のブロックを削除したかったのです。
行自体を削除すると、常に64行目にエラーが報告されます。fatal: corrupt patch at line 64 fatal: Could not apply '.git/ADD_EDIT.patch'
Git 2.21以降ではこの種のエラーは表示されないはずです(2019年第1四半期)。2.21より前では、ユーザーに編集させたい変更が以前に残された変更よりも小さい場合、「git add -e
」が混乱していたためです。一時ファイルで終了します。
add --edit
:パッチファイルを切り捨てますすでに
.git/ADD_EDIT.patch
ファイルがある場合、それを適切に切り捨てることができず、非常に面白いエラーが発生する可能性があります。もちろん、このファイルをそのままにしておくべきではありません。
しかし、少なくとも1つのケースでは、現在の差分よりも大きい古いコピーがありました。その結果、diffが破損しました。ファイルを書き込むときにファイルを切り捨てて、あまり気にしないようにしましょう。
私はこれと同様の問題を抱えていました(おそらく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>
行です。
解決策は、トランク全体を削除することでした。つまり、@@行から下のすべてを削除すると、すぐに機能しました。
これがお役に立てば幸いです。