42

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行もありません!? ファイルを改行で終了しても問題は解決しないことに注意してください

4

6 に答える 6

46

どうやら Git GUIでは、個々の行をステージングするときに、ファイルが改行で終わる必要があるようです。

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

于 2012-09-22T22:09:43.637 に答える
16

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

または、誤って 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

元のファイルに次の行がないため、このパッチは失敗します。

-Line with space at end<---

それは持っています:

-Line with space at end <--- 

UPD2

したがって、次の行のパッチの場合

android:tileMode="repeat"

エディターがトレーニング スペースを削除します。パッチは失敗します

于 2015-08-01T12:10:18.457 に答える
2

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

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

于 2013-11-05T14:06:19.457 に答える
0

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

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

  2. すべての変更を隠す

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

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

    git stage <your file>
    
  5. スタッシュから変更をポップ

    git stash pop
    

これで、このエラーなしで gui 経由で単一行をステージングできるはずです。これが機能するのは、改行を含む部分だけをステージングした後、スタッシュから復元されたバージョンへの差分で、改行文字で終わるファイルが既に表示されているためです。

于 2014-04-29T13:05:51.513 に答える