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行すらありません!?新しい行でファイルを終了しても、問題は解決しませんでした
どうやらGit GUI requires個々の行をステージングするときにファイルが改行で終わること 。
少なくとも1つの時点で、ファイルの最後に改行がなくても個々の行をステージングしても大丈夫だったと確信していますが、明らかにそれはもはや不可能です。自分でこの問題に遭遇し、ファイルの最後に改行があると修正され、それらを削除すると問題が発生します。
実際、これは「-」行を編集するときによく起こります。
「-」を削除し、その代わりに「」(スペース)を追加するのを忘れた場合
または、誤って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"
編集者がトレーニングスペースを削除します。パッチは失敗します
Git GUIは、作業しているチャンクが大きすぎる(つまり、修正された連続する行が多すぎる)場合、インデックスに行を追加/削除できません。
私の回避策:変更が「ピンクの壁」ではない場合(チャンクの途中に変更されていない行がある場合)、編集>オプションに移動し、diffのコンテキストで行数を減らします。これがうまくいかない場合は、めちゃくちゃです。他のツール(たとえば、コマンドラインなど)を使用します。
ハンクのステージング中にこのエラーが発生していました。
ここで言及した「空白」は、git diffオプションに「-w」が含まれていることを思い出させてくれました。
そのフラグを削除し(git-guiの "Options ..."を使用)、エラーなしでhunkをステージングできました。その後、それを追加し直しました(何が変わったのかを調べるときに、通常は空白の差分を表示したくないためです)。
これが役立つかどうかはわかりませんが、試してみても無害で、簡単に元に戻すことができます。
この問題は、emacsのパッチに改行を追加しようとして、保存時に最後に改行が自動的に削除されたために発生しました。
Emacsを使用してパッチの最後に改行を追加している場合は、再度削除することもあります。別のテキストエディタを開いて改行を追加しましたが、機能しました。
Kyl191の答えに触発されて、この問題の簡単な解決策を思いつきました。
ファイルの末尾に改行文字を追加します
すべての変更を隠します
git stash
ファイルの最後に改行文字をもう一度追加して、現在のファイルと隠しバージョンに改行文字を追加します
対応するハンクをステージングします(改行のみが含まれます)
git stage <your file>
stashから変更をポップします
git stash pop
これで、このエラーなしでguiを介して単一行をステージングできるはずです。これは、部分を含む改行のみをステージングした後、stashから復元されたバージョンとの差分には、改行文字で終わるファイルが既に表示されているためです。