我尝试过在TextWrangler中编辑一个php文件,并将行尾设置为Unix、NetBeans和vim。当我将diff保存到补丁中,然后尝试应用它时,它会出现空白错误。当我键入git diff
时,我可以看到^M
出现在我的行的末尾,但如果我在vim中手动删除它们,它会说我的补丁文件已损坏,然后补丁根本不适用。
我使用以下命令创建修补程序:git diff > patchname.patch
以上
我通过检查要修补的文件的干净版本并键入来应用它git apply patchname.patch
如何在没有空格错误的情况下创建此修补程序?我以前创建过补丁,从未遇到过这个问题。
8条答案
按热度按时间vs3odd8k1#
git apply --reject --whitespace=fix mychanges.path
w6mmgewl2#
你确定这些都是硬错误吗?默认情况下,git将警告空白错误,但仍将接受它们。如果它们是硬错误,那么您必须更改了一些设置。您可以使用
--whitespace=
标志到git apply
来控制每次调用。尝试这将强制执行默认行为,即警告但接受。您还可以使用
--whitespace=nowarn
完全删除警告。控制此操作的配置变量是
apply.whitespace
。作为参考,此处的空白错误不是修补程序的错误。默认情况下,git在应用补丁时会抱怨这是一种代码风格的东西。值得注意的是,它不喜欢尾随空格。类似地,
git diff
将突出显示空白错误(如果您正在向终端输出并且颜色为开)。默认行为是警告,但无论如何接受补丁,因为不是每个项目都热衷于空白。v64noz0r3#
尝试补丁-p1<filename.patch
oknrviil4#
很多时候,当我的队友在Linux/Windows上工作或使用git发送电子邮件时,我都会遇到这样的问题。
我过去总是服从命令。
或
-3选项将尝试三向合并,这将有助于解决其他问题。
jfewjypa5#
单线解决方案是:
来源:https://wiki.gnome.org/Projects/GnomeShell/Development/WorkingWithPatches
moiiocjp6#
我认为如何处理空白的问题已经得到了充分的回答,但你问它是从哪里来的。您在行尾提到了
^M
:这就是Git显示Windows行尾的方式。在创建补丁之前,可以尝试在源文件上运行dos2unix
,或者使用维护原始行尾的编辑器。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
9njqaruj8#
您可以尝试运行fromdos命令来修复空格错误。基本上,它会将diff文件从DOS转换为Unix。因此,您只需要运行:
然后,如果您运行:
不会出现尾随空格错误。
编辑:我认为用户TRig也提出了同样的建议,fromdos-unix命令是使用dos2unix的替代建议。