web-dev-qa-db-ja.com

「致命的:XX行のパッチが破損している」単一行のステージング時

Git guiを使用して単一行または複数行をステージングしようとすると、次のエラーが表示されます(右クリック->ステージングコミット)。それは私にとって初めてのことではなく、他の人がそれに直面しているのを見つけましたが、それを解決する方法を見つけることができませんでした。

この問題に遭遇した人はいませんか?私ができることはありますか(すべてのファイルをステージングすることは本当の解決策ではありません)

更新:削除された行をステージングしようとすると、次のエラーが表示されるファイルがあります。

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android" 
    Android:src="@drawable/texture"
    Android:tileMode="repeat"
-   Android:dither="true"
    >
</bitmap>
\ No newline at end of file

エラーメッセージは次のとおりです。

fatal: corrupt patch at line 14

奇妙なことに、次の罰金には14行すらありません!?新しい行でファイルを終了しても、問題は解決しませんでした

40
Kirill Kulakov

どうやらGit GUI requires個々の行をステージングするときにファイルが改行で終わること

少なくとも1つの時点で、ファイルの最後に改行がなくても個々の行をステージングしても大丈夫だったと確信していますが、明らかにそれはもはや不可能です。自分でこの問題に遭遇し、ファイルの最後に改行があると修正され、それらを削除すると問題が発生します。

44
Kyle

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

または、誤って2つのスペースを追加し、識別情報として「タブ」を使用します

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

一部の人々が--ignore-space-change--ignore-whitespace--whitespace=fix回避策としてですが、これは混同してはならない別のことです。

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

[〜#〜] upd [〜#〜]

また、エディターに「終了行のスペースを削除する」オプションがある可能性があります。そのため、エディターでパッチを保存する場合:

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

PD2

だから次の行のパッチで

Android:tileMode="repeat"

編集者がトレーニングスペースを削除します。パッチは失敗します

13
Eugen Konkov

Git GUIは、作業しているチャンクが大きすぎる(つまり、修正された連続する行が多すぎる)場合、インデックスに行を追加/削除できません。

私の回避策:変更が「ピンクの壁」ではない場合(チャンクの途中に変更されていない行がある場合)、編集>オプションに移動し、diffのコンテキストで行数を減らします。これがうまくいかない場合は、めちゃくちゃです。他のツール(たとえば、コマンドラインなど)を使用します。

2
Zonko

ハンクのステージング中にこのエラーが発生していました。

ここで言及した「空白」は、git diffオプションに「-w」が含まれていることを思い出させてくれました。

そのフラグを削除し(git-guiの "Options ..."を使用)、エラーなしでhunkをステージングできました。その後、それを追加し直しました(何が変わったのかを調べるときに、通常は空白の差分を表示したくないためです)。

これが役立つかどうかはわかりませんが、試してみても無害で、簡単に元に戻すことができます。

1
Mike B

この問題は、emacsのパッチに改行を追加しようとして、保存時に最後に改行が自動的に削除されたために発生しました。

Emacsを使用してパッチの最後に改行を追加している場合は、再度削除することもあります。別のテキストエディタを開いて改行を追加しましたが、機能しました。

0
stanri

Kyl191の答えに触発されて、この問題の簡単な解決策を思いつきました。

  1. ファイルの末尾に改行文字を追加します

  2. すべての変更を隠します

    git stash
    
  3. ファイルの最後に改行文字をもう一度追加して、現在のファイルと隠しバージョンに改行文字を追加します

  4. 対応するハンクをステージングします(改行のみが含まれます)

    git stage <your file>
    
  5. stashから変更をポップします

    git stash pop
    

これで、このエラーなしでguiを介して単一行をステージングできるはずです。これは、部分を含む改行のみをステージングした後、stashから復元されたバージョンとの差分には、改行文字で終わるファイルが既に表示されているためです。

0
xmoex