TextWranglerで行末をUnix、NetBeans、およびvimに設定してphpファイルを編集しようとしました。差分をパッチに保存してから適用しようとすると、空白エラーが発生します。 git diff
と入力すると、行の最後に^M
が表示されますが、vimでこれらを手動で削除すると、パッチファイルが破損していると表示され、パッチはまったく適用されません。
次のコマンドでパッチを作成します。
git diff > patchname.patch
そして、パッチを適用するファイルのクリーンバージョンをチェックアウトし、入力して適用します
git apply patchname.patch
空白エラーなしでこのパッチを作成するにはどうすればよいですか?以前にパッチを作成しましたが、この問題に遭遇することはありません。
これらはハードエラーですか?デフォルトでは、gitは空白エラーについて警告しますが、それでも受け入れます。ハードエラーの場合は、いくつかの設定を変更している必要があります。 --whitespace=
フラグをgit apply
に使用して、呼び出しごとにこれを制御できます。試して
git apply --whitespace=warn patchname.patch
これにより、デフォルトの動作が強制されます。これは警告しますが、受け入れます。 --whitespace=nowarn
を使用して、警告を完全に削除することもできます。
これを制御する構成変数はapply.whitespace
です。
参考までに、ここの空白エラーはパッチのエラーではありません。これは、パッチを適用するときにgitがデフォルトで文句を言うコードスタイルのことです。特に、末尾の空白は嫌いです。同様に、git diff
は空白エラーを強調表示します(端末に出力していて、色がオンの場合)。デフォルトの動作では警告が表示されますが、とにかくパッチを受け入れます。これは、すべてのプロジェクトが空白について熱狂的ではないためです。
git apply --reject --whitespace=fix mychanges.path
Patch -p1 <filename.patchを試してください
1行のソリューションは次のとおりです。
emacs <filename> -f delete-trailing-whitespace -f save-buffer -f kill-emacs
ソース: https://wiki.gnome.org/Projects/GnomeShell/Development/WorkingWithPatches
空白に対処する方法の質問は適切に回答されたと思いますが、あなたはそれがどこから来たのか尋ねました。行の終わりで^M
に言及しました:これがGitがWindowsの行末を表示する方法です。パッチを作成する前に、ソースファイルでdos2unix
を実行するか、元の行末を保持するエディターを使用してください。