如何忽略来自' git status'的文件如果只有空格和换行符改变了

时间:2013-10-19 15:41:23

标签: git

我经常使用某些标签而不是空格来推送代码,反之亦然,或者插入换行符以提高代码的可读性。我如何告诉git不要寻找这些变化?

3 个答案:

答案 0 :(得分:12)

我找不到使用git status识别真正更改内容的本机git解决方案,但以下单行程在linux下运行良好:

for m in $(git status | grep modified| awk '{print $2}');do test -z "$(git diff -w $m)" || echo $m;done

结果将是一个修改文件列表,不包括只有空格更改的文件。

当您只想查看具有实际编辑的文件时,这在写入提交消息之前特别有用,这在Windows和Linux系统之间来回移动时经常会出现问题。如果您可以控制两个系统,那么在git中配置空格设置可能是一个更清晰的解决方案。

答案 1 :(得分:7)

这应该可以解决问题:

git diff -w | git apply --cached --ignore-whitespace

修补程序将在不添加空格的情况下应用添加。

答案 2 :(得分:0)

在工作区中发现非白色变化时,git diff确实是您的朋友(与“ git status”相对应)。 git diff有几个选项可以量身定制,其中一些是

--ignore-space-at-eol
--ignore-space-change / -b
--ignore-all-space / -w

如果您对类似git status的已更改文件列表感兴趣,可以发出

git diff --name-only

不幸的是,将其与例如-w仅查看包含非白色更改的文件不起作用(至少在我当前的git版本2.15中无效)

所以我想实现后者的方法是使用普通的git diff -w命令,然后提取文件名:

git diff -w |grep "^--- a"

这是利用git diff引入特定文件差异输出的方式,并且比此页面上建议的其他单行脚本要简单一些。

一个警告:AFAIK在文本中间插入换行符 (例如,如OP所述,以提高代码的可读性)将永远不会被忽略,因为它可以有效地替换一行文本两行。