Git diff -w 仅在行首和行尾忽略空格
Posted
技术标签:
【中文标题】Git diff -w 仅在行首和行尾忽略空格【英文标题】:Git diff -w ignore whitespace only at start & end of lines 【发布时间】:2011-05-20 00:54:26 【问题描述】:我喜欢使用git diff -w
来忽略空格差异。但是,我只是注意到它甚至忽略了行中间的空白差异。我怎么能只忽略行首 (^) 或行尾 ($) 的空白差异?
【问题讨论】:
考虑改用git diff -b
?
"-b --ignore-space-change 忽略空格数量的变化。这会忽略行尾的空格,并认为一个或多个空格字符的所有其他序列是等效的。"跨度>
不知道的朋友,git diff -b
是git diff --ignore-space-change
的别称
有许多相关但不相同的问题。我想要的是'我可以确定我的更改不会改变功能'。以下哪个空格符合这个定义“放置'hello world'”。
@justintime 我不认为 Git(或我知道的任何其他工具)可以做你想做的事。也许尝试编写测试或使用 linter,或两者兼而有之。
【参考方案1】:
这是一个老问题,但仍然经常查看/需要。我想发帖提醒像我这样的读者,OP 的问题中提到的 whitespace 与 Regex 的定义 not 相同,包括换行符、制表符和空格字符—— Git 要求你明确表达。在此处查看一些选项:https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
如上所述,git diff -b
或 git diff --ignore-space-change
将忽略行尾的空格。如果您希望该设置成为您的默认行为,则以下行将该意图添加到您的 .gitconfig 文件中,因此它将始终忽略行尾的空格:
git config --global core.whitespace trailing-space
就我而言,我发现这个问题是因为我有兴趣忽略“回车空格差异”,所以我需要这个:
git diff --ignore-cr-at-eol
或
git config --global core.whitespace cr-at-eol
来自here。
您还可以通过省略 --global 参数并检查该 repo 的设置文件,将其设置为 仅适用于该 repo 的默认值。对于我遇到的 CR 问题,如果 .gitconfig 文件的 [core] 部分中的 warncrlf 或 autocrlf = true ,它会在签入后消失。
【讨论】:
【参考方案2】:行尾使用:
git diff --ignore-space-at-eol
而不是您当前使用的:
git diff -w (--ignore-all-space)
首先...如果你想要一个内置的解决方案,那你就不走运了。
但是,如果您不介意弄脏自己的手,那么会有一个相当旧的补丁漂浮在某处,它增加了对“--ignore-space-at-sol”的支持。
【讨论】:
谢谢,但如果您将 diff 配置为外部工具,它将不起作用.. 有什么想法吗? @adardesign,我认为这可能必须在外部工具中进行配置。我不确定 git 是否可以在不更改空格的情况下呈现差异......不过可能是错误的; git 很强大... 如果能默认配置就好了。我的意思是 -w 或 -b 或 --ignore-all-space。在***.com/questions/7310033/… 有关于它的讨论 我同意 -b 的建议,因为 -w 将“abc def”和“abcdef”视为相同,这很少是我想要的!以上是关于Git diff -w 仅在行首和行尾忽略空格的主要内容,如果未能解决你的问题,请参考以下文章