我让我的文本编辑器在保存文件时自动修剪尾随空格,而且我正在为一个开源项目做贡献,该项目在尾随空格方面存在严重问题。
每次我尝试提交一个补丁时,我必须首先手动忽略所有只有空白的更改,只选择相关信息。不仅如此,当我运行git rebase时,我通常会遇到一些问题。
因此,我希望能够仅向索引添加非空白的更改,以类似于git add -p的方式,但不必自己选择所有更改。
有人知道怎么做吗?
编辑:我不能改变项目的工作方式,他们在邮件列表上讨论后决定忽略这一点。
我让我的文本编辑器在保存文件时自动修剪尾随空格,而且我正在为一个开源项目做贡献,该项目在尾随空格方面存在严重问题。
每次我尝试提交一个补丁时,我必须首先手动忽略所有只有空白的更改,只选择相关信息。不仅如此,当我运行git rebase时,我通常会遇到一些问题。
因此,我希望能够仅向索引添加非空白的更改,以类似于git add -p的方式,但不必自己选择所有更改。
有人知道怎么做吗?
编辑:我不能改变项目的工作方式,他们在邮件列表上讨论后决定忽略这一点。
当前回答
这是我的黑客。
git diff -w | grep "diff --git a/*" | sed -r 's#diff --git a/(.*) b(.*)#\1#g' | xargs git add
Git diff -w只显示没有空格的文件,
其他回答
投票最多的答案并不适用于所有情况,因为根据评论中的用户,补丁上下文中有空白。
我将命令修改如下:
$ git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero
这会生成一个没有上下文的补丁。应该不是问题,因为补丁是短暂的。
对应的别名,同样是其他用户已经提供的内容的修订:
addw = !sh -c 'git diff -U0 -w --no-color "$@" | git apply --cached --ignore-whitespace --unidiff-zero' -
这是我的黑客。
git diff -w | grep "diff --git a/*" | sed -r 's#diff --git a/(.*) b(.*)#\1#g' | xargs git add
Git diff -w只显示没有空格的文件,
我让我的文本编辑器在保存文件时自动修剪尾随空格
你的编辑器没有proj / dir特定的设置吗?可以禁用此项目的空白首选项。似乎是一个更简单的解决方案…
下面这个怎么样:
git add `git diff -w --ignore-submodules |grep "^[+][+][+]" |cut -c7-`
反引号内的命令获取有非空格更改的文件名。
类似于@void。指针的答案,但修复最近的提交。
git reset --mixed HEAD^
git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero -
这将使空白更改不进行,而其余更改将进行。