我发现很多网站解释了如何让 git 在您更改行结尾时发出警告,或者解释如何使用其他各种技术来防止您弄乱整个文件。假设现在已经太晚了——树已经提交了切换文件行结尾的提交,因此git diff
显示了旧文件的减去,然后添加了具有相同内容的新文件
我正在寻找一个 git 配置选项或命令行标志,告诉diff
您忽略这些选项 - 如果两行仅由空格不同,则假装它们是相同的。我需要这个配置选项/标志来处理任何依赖于文件差异的东西 - diff
,,blame
甚至merge
/rebase
理想情况下 - 我想git
完全忽略尾随空格,特别是行结尾。我怎样才能做到这一点?
答案1
对于 diff,有git diff --ignore-space-at-eol
,这应该足够好了。对于 diff 和 Blame,您可以使用-w
: git diff -w
,忽略所有空白更改git blame -w
。
对于git apply
和git 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 "$@"
为了最大程度地减少混合行结尾的麻烦,请确保文本文件是这样声明的。
也可以看看git-merge 是否可以忽略行结束差异?在堆栈溢出上。