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

bet*_*eth 38 git textwrangler whitespace netbeans removing-whitespace

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

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

git diff > patchname.patch

我通过检查要修补和输入的文件的干净版本来应用它

git apply patchname.patch

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

Lil*_*ard 29

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

git apply --whitespace=warn patchname.patch
Run Code Online (Sandbox Code Playgroud)

这将强制默认行为,即警告但接受.您还可以使用--whitespace=nowarn完全删除警告.

控制它的配置变量是apply.whitespace.


作为参考,这里的空白错误不是补丁的错误.这是一个代码风格的东西,默认情况下,git会在应用补丁时抱怨.值得注意的是,它不喜欢尾随空白.同样git diff会突出显示空白错误(如果您输出到终端并且颜色已打开).默认行为是警告,但无论如何都要接受补丁,因为并非每个项目都对空白感兴趣.

  • @beth:呃,在创建diff之前删除源代码中的尾部空格?或者你可以继续使用`git apply --whitespace = fix patchname.patch`,它将修复它为你看到的空白错误. (5认同)
  • @beth:你提到过试图从diff中删除它.手动编辑差异是一个棘手的过程.但同样,您可以使用`git apply --whitespace = fix patchname.patch`,git将为您修复空白. (4认同)
  • 我明白那个.但是,我很困惑这个空白来自何处.我没有问我是否应该关心它,我问如何解决它. (3认同)
  • 空白来自您尝试应用的补丁。这意味着它来自您最初获取的差异。 (2认同)
  • 我知道。我正在尝试找出如何创建差异而不以空格结束。 (2认同)

zed*_*ght 29

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

  • 用于自动修复空白错误.--whitespace = fix确保在应用路径之前修复空白错误,并且--reject确保原子性,因此如果不应用补丁,则不会修改工作目录文件.资料来源:https://git-scm.com/docs/git-apply (5认同)

fla*_*ash 8

尝试补丁-p1 <filename.patch

  • 这是做什么的?.diff文件从哪里来? (2认同)

Jee*_*tel 6

很多时候,当我的队友在 Linux/Windows 上工作或使用 git send-email 时,我都遇到过这样的问题。

我总是遵循以下命令。

git apply -3 --whitespace=fix yourpatch.patch
Run Code Online (Sandbox Code Playgroud)

或者

git am -s -3 --whitespace=fix yourpatch.patch
Run Code Online (Sandbox Code Playgroud)

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