忽略所有 git 命令中的空格更改

Mic*_*zek 30 configuration git whitespace

我找到了大量网站,它们解释了如何在更改行尾时让 git 警告您,或者使用其他各种技术来防止您弄乱整个文件。假设现在为时已晚——树已经有切换文件行尾的提交,因此git diff显示旧文件的减法,然后添加具有相同内容的新文件

我正在寻找一个 git 配置选项或命令行标志,它告诉diff忽略那些 - 如果两行只有空格不同,假装它们是相同的。我需要这个配置选项/标志工作任何依赖文件的差异- diffblame甚至merge/rebase理想-我想git完全忽略尾随的空白,尤其是行尾。我怎样才能做到这一点?

Gil*_*il' 17

对于差异,有git diff --ignore-space-at-eol,这应该足够了。对于差异和指责,您可以使用-w: git diff -w、忽略所有空格更改git blame -w

对于git applygit rebase,文档中提到--ignore-whitespace

对于合并,您似乎需要使用外部合并工具。你可以使用这个包装脚本(未经测试),favorite-mergetool你最喜欢的合并工具在哪里;跑git -c mergetool.nocr.cmd=/path/to/wrapper/script merge。合并的结果将是 unix 格式;如果您更喜欢另一种格式,请将所有内容转换为该不同格式,或$MERGED在合并后进行转换。

#!/bin/sh
set -e
TEMP=$(mktemp)
tr -d '\013' <"$BASE" >"$TEMP"
mv -f "$TEMP" "$BASE"
TEMP=$(mktemp)
tr -d '\013' <"$LOCAL" >"$TEMP"
mv -f "$TEMP" "$LOCAL"
TEMP=$(mktemp)
tr -d '\013' <"$REMOTE" >"$TEMP"
mv -f "$TEMP" "$REMOTE"
favorite-mergetool "$@"
Run Code Online (Sandbox Code Playgroud)

为了尽量减少混合行结尾的麻烦,请确保文本文件被声明为这样

另请参阅git-merge 是否可以忽略行尾差异?在堆栈溢出上。

  • 对于“git 状态”? (2认同)