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


26

我发现了很多网站,它们解释了如何在更改行尾时使用git来警告您,或者使用了其他多种方法来防止您弄乱整个文件。假设为时已晚-树已经具有可切换文件行尾的提交,因此git diff显示了减去旧文件后再添加具有相同内容的新文件

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

Answers:


14

对于diff,有git diff --ignore-space-at-eol,应该足够好。对于diff和blame,您可以使用-wgit 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 "$@"

为了最大程度减少混合行尾的麻烦,请确保将文本文件声明为such

另请参见git-merge是否有可能忽略行尾差异?在堆栈溢出。


是否有任何配置可始终在git blame中使用-w标志?
Thayne 2015年

@Thayne我不知道。您可以定义一个别名,bl = blame -w但不能重新定义内置命令的名称,并且看不到将其设置为默认值的配置选项。但是我不是git专家。
吉尔斯(Gilles)'所以别再邪恶了'

git status
Ejaz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.