我的diff包含尾随空格-如何消除它?

dfddblmv  于 2022-10-23  发布在  Git
关注(0)|答案(8)|浏览(254)

我尝试过在TextWrangler中编辑一个php文件,并将行尾设置为Unix、NetBeans和vim。当我将diff保存到补丁中,然后尝试应用它时,它会出现空白错误。当我键入git diff时,我可以看到^M出现在我的行的末尾,但如果我在vim中手动删除它们,它会说我的补丁文件已损坏,然后补丁根本不适用。
我使用以下命令创建修补程序:
git diff > patchname.patch以上
我通过检查要修补的文件的干净版本并键入来应用它
git apply patchname.patch
如何在没有空格错误的情况下创建此修补程序?我以前创建过补丁,从未遇到过这个问题。

vs3odd8k

vs3odd8k1#

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

w6mmgewl

w6mmgewl2#

你确定这些都是硬错误吗?默认情况下,git将警告空白错误,但仍将接受它们。如果它们是硬错误,那么您必须更改了一些设置。您可以使用--whitespace=标志到git apply来控制每次调用。尝试

git apply --whitespace=warn patchname.patch

这将强制执行默认行为,即警告但接受。您还可以使用--whitespace=nowarn完全删除警告。
控制此操作的配置变量是apply.whitespace
作为参考,此处的空白错误不是修补程序的错误。默认情况下,git在应用补丁时会抱怨这是一种代码风格的东西。值得注意的是,它不喜欢尾随空格。类似地,git diff将突出显示空白错误(如果您正在向终端输出并且颜色为开)。默认行为是警告,但无论如何接受补丁,因为不是每个项目都热衷于空白。

v64noz0r

v64noz0r3#

尝试补丁-p1<filename.patch

oknrviil

oknrviil4#

很多时候,当我的队友在Linux/Windows上工作或使用git发送电子邮件时,我都会遇到这样的问题。
我过去总是服从命令。

git apply -3 --whitespace=fix yourpatch.patch

git am -s -3 --whitespace=fix yourpatch.patch

-3选项将尝试三向合并,这将有助于解决其他问题。

jfewjypa

jfewjypa5#

单线解决方案是:

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

来源:https://wiki.gnome.org/Projects/GnomeShell/Development/WorkingWithPatches

moiiocjp

moiiocjp6#

我认为如何处理空白的问题已经得到了充分的回答,但你问它是从哪里来的。您在行尾提到了^M:这就是Git显示Windows行尾的方式。在创建补丁之前,可以尝试在源文件上运行dos2unix,或者使用维护原始行尾的编辑器。

falq053o

falq053o7#

您可以使用patchutils[1]中的combinediff和-w选项
git diff | combinediff - /dev/null -w > patchname.patch
[1]
https://github.com/twaugh/patchutils
https://repology.org/project/patchutils/versions

9njqaruj

9njqaruj8#

您可以尝试运行fromdos命令来修复空格错误。基本上,它会将diff文件从DOS转换为Unix。因此,您只需要运行:

fromdos mychanges.patch

然后,如果您运行:

git apply mychanges.patch

不会出现尾随空格错误。
编辑:我认为用户TRig也提出了同样的建议,fromdos-unix命令是使用dos2unix的替代建议。

相关问题