我尝试在TextWrangler中编辑一个php文件,其行结尾设置为Unix,NetBeans和vim。当我将差异保存到补丁然后尝试应用它时,它会产生空白错误。当我输入git diff
时,我可以在我的行的末尾看到^M
,但如果我在vim中手动删除它们,则说我的补丁文件已损坏,然后补丁根本不适用
我使用以下命令创建补丁:
git diff > patchname.patch
我通过检查要修补的文件的干净版本并输入
来应用它 git apply patchname.patch
如何在没有空格错误的情况下创建此补丁?我以前创建了补丁,但从未遇到过这个问题。
答案 0 :(得分:27)
git apply --reject --whitespace=fix mychanges.path
答案 1 :(得分:25)
你确定那些硬错误吗?默认情况下,git会警告空白错误,但仍会接受它们。如果它们是硬错误,那么您必须更改某些设置。您可以使用--whitespace=
标记git apply
来基于每次调用来控制此标记。尝试
git apply --whitespace=warn patchname.patch
这将强制默认行为,即警告但接受。您也可以使用--whitespace=nowarn
完全删除警告。
控制它的配置变量是apply.whitespace
。
作为参考,此处的空格错误不是您的补丁错误。这是一个代码风格的东西,默认情况下,git会在应用补丁时抱怨。值得注意的是,它不喜欢尾随空白。类似地,git diff
将突出显示空格错误(如果您输出到终端并且颜色已打开)。默认行为是警告,但无论如何都要接受补丁,因为并非每个项目都对空白都是狂热的。
答案 2 :(得分:8)
尝试补丁-p1< filename.patch
答案 3 :(得分:2)
一线解决方案是:
emacs <filename> -f delete-trailing-whitespace -f save-buffer -f kill-emacs
源: https://wiki.gnome.org/Projects/GnomeShell/Development/WorkingWithPatches
答案 4 :(得分:0)
我认为有关如何处理空白的问题已得到充分回答,但是您问它是哪里来的。您在行尾提到了// Create given String and make with size 30
String str = "Hello How Are You";
// Creating StringBuffer Object for right padding
StringBuffer stringBufferRightPad = new StringBuffer(str);
while (stringBufferRightPad.length() < 30) {
stringBufferRightPad.insert(stringBufferRightPad.length(), "*");
}
System.out.println("after Left padding : " + stringBufferRightPad);
System.out.println("after Left padding : " + stringBufferRightPad.toString());
// Creating StringBuffer Object for right padding
StringBuffer stringBufferLeftPad = new StringBuffer(str);
while (stringBufferLeftPad.length() < 30) {
stringBufferLeftPad.insert(0, "*");
}
System.out.println("after Left padding : " + stringBufferLeftPad);
System.out.println("after Left padding : " + stringBufferLeftPad.toString());
:Git就是这样显示Windows行尾。也许在创建补丁之前尝试在源文件上运行^M
,或者使用维护原始行结尾的编辑器。
答案 5 :(得分:0)
很多时候我的队友在Linux / Windows上工作或使用git send-email时都会遇到此类问题。
我一直都遵循以下命令。
git apply -3 --whitespace=fix yourpatch.patch
或
git am -s -3 --whitespace=fix yourpatch.patch
-3选项将尝试三向合并,这也将有助于解决其他问题。