web-dev-qa-db-ja.com

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: 2つまたは3つの改行を追加しても、役に立ちません。

EDIT2:このエラーは、最後のハンク内の行をコミットするときにのみ発生します。

18
wassup

よくチェックしなくてごめんなさい。

通常どおりに追加とコミットを試みましたが、Git-GUIを使用せずに、コマンドラインを使用して機能しました。

そのため、Git-GUIに問題がある場合は、私と同じようにしないで、投稿する前にコマンドラインで確認することをお勧めします。

0
wassup

これは、「-」行を編集するときに発生します。
'-'を削除し、代わりに ''(スペース)を追加するのを忘れた場合

パッチを開き、そのままにしておきたいすべての行が ''(スペース)で始まっていることを確認します

[〜#〜] 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 <--- 
15
Eugen Konkov

commitはパッチに対して何もしません。それは彼らのコンテンツでさえ何もしません。コミットは、ツリーとコミットオブジェクトのみをフォーマットし、HEADとそれが指す参照を調整します。したがって、このエラーを発生させるのはコミット自体ではありません。

addでもありません。これは、新しいファイルコンテンツをハッシュしている間、新しいコンテンツを操作し、違いをまったく気にしないためです。

違いを気にする唯一の考えは、末尾の空白やいくつかの同様の問題を追加していないことを確認するデフォルトのpre-commitフックです。 git commit --no-verifyを呼び出すと、そのチェックをスキップできます。しかし、そもそもそれを有効にする必要があり、おそらくそれを知っているでしょう。

2
Jan Hudec

私はこれと同じ問題を抱えていました、そしてついにそれが何であるかを理解しました。一部の行は、スペースではなくタブでインデントされていました。すべてのインデントをスペースに変更した後、それは機能しました。

1
baldguy99

別の潜在的な問題は、特に通常のテキストエディターを使用して編集する場合、ハンクの先頭にある数字を処理できないことです。これは、古いコードの行数と新しいコードの行数、および場所を示します。それぞれから始まります。数値が一致しない場合は、fatal: corrupt patch at line xエラーが発生します。

たとえば、@@ -32,9 +54,15 @@は、元のファイルの32行目と次の9行で置き換えられるコードを見つけるように指示しますが、編集されたファイルでは、54行目から15行になります。追加または削除した場合どの行でも、それらの番号も編集する必要があります。

私はそれについて実際の調査を行ったことがなく、git guiを使用したこともありませんが、改行で終わらない行は技術的にはいくつかの標準に従って行ではないため、一方または両方を変更する必要があると考えられます。それらの番号を1つずつ正しく適用します。

1
ejwilson

そして、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が破損しました。

ファイルを書き込むときにファイルを切り捨てて、あまり気にしないようにしましょう。

1
VonC

私はこれと同様の問題を抱えていました(おそらく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>行です。

解決策は、トランク全体を削除することでした。つまり、@@行から下のすべてを削除すると、すぐに機能しました。

これがお役に立てば幸いです。

0
Adowrath