web-dev-qa-db-ja.com

私の差分には末尾の空白が含まれています-それを取り除く方法は?

TextWranglerで行末をUnix、NetBeans、およびvimに設定してphpファイルを編集しようとしました。差分をパッチに保存してから適用しようとすると、空白エラーが発生します。 git diffと入力すると、行の最後に^Mが表示されますが、vimでこれらを手動で削除すると、パッチファイルが破損していると表示され、パッチはまったく適用されません。

次のコマンドでパッチを作成します。

git diff > patchname.patch

そして、パッチを適用するファイルのクリーンバージョンをチェックアウトし、入力して適用します

git apply patchname.patch

空白エラーなしでこのパッチを作成するにはどうすればよいですか?以前にパッチを作成しましたが、この問題に遭遇することはありません。

36
beth

これらはハードエラーですか?デフォルトでは、gitは空白エラーについて警告しますが、それでも受け入れます。ハードエラーの場合は、いくつかの設定を変更している必要があります。 --whitespace=フラグをgit applyに使用して、呼び出しごとにこれを制御できます。試して

git apply --whitespace=warn patchname.patch

これにより、デフォルトの動作が強制されます。これは警告しますが、受け入れます。 --whitespace=nowarnを使用して、警告を完全に削除することもできます。

これを制御する構成変数はapply.whitespaceです。


参考までに、ここの空白エラーはパッチのエラーではありません。これは、パッチを適用するときにgitがデフォルトで文句を言うコードスタイルのことです。特に、末尾の空白は嫌いです。同様に、git diffは空白エラーを強調表示します(端末に出力していて、色がオンの場合)。デフォルトの動作では警告が表示されますが、とにかくパッチを受け入れます。これは、すべてのプロジェクトが空白について熱狂的ではないためです。

26
Lily Ballard

git apply --reject --whitespace=fix mychanges.path

28
zednight

Patch -p1 <filename.patchを試してください

8
flash

1行のソリューションは次のとおりです。

emacs <filename> -f delete-trailing-whitespace -f save-buffer -f kill-emacs

ソース: https://wiki.gnome.org/Projects/GnomeShell/Development/WorkingWithPatches

2
askalski

空白に対処する方法の質問は適切に回答されたと思いますが、あなたはそれがどこから来たのか尋ねました。行の終わりで^Mに言及しました:これがGitがWindowsの行末を表示する方法です。パッチを作成する前に、ソースファイルでdos2unixを実行するか、元の行末を保持するエディターを使用してください。

0
TRiG