我的差异包含尾随空格 - 如何摆脱它?

时间:2013-01-24 20:16:38

标签: git netbeans whitespace removing-whitespace textwrangler

我尝试在TextWrangler中编辑一个php文件,其行结尾设置为Unix,NetBeans和vim。当我将差异保存到补丁然后尝试应用它时,它会产生空白错误。当我输入git diff时,我可以在我的行的末尾看到^M,但如果我在vim中手动删除它们,则说我的补丁文件已损坏,然后补丁根本不适用

我使用以下命令创建补丁:

git diff > patchname.patch

我通过检查要修补的文件的干净版本并输入

来应用它

git apply patchname.patch

如何在没有空格错误的情况下创建此补丁?我以前创建了补丁,但从未遇到过这个问题。

6 个答案:

答案 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选项将尝试三向合并,这也将有助于解决其他问题。