忽略换行和空格更改的git状态

4

我目前在使用Markdown文件来记录笔记,但是我使用的编辑器(marktext)如果打开现有的文件,就会添加新的空行。

这些新添加的空行被git跟踪,并且git一直将这些文件显示为修改过的文件。是否有一种方法可以配置git,在执行git status时不跟踪这些类型的更改,比如新行和尾随空格?因为当我针对这些特定的文件执行git diff --ignore-all-space --ignore-blank-lines <path-to-file>时,它根本不显示任何更改。

提前感谢。

2个回答

4

我不知道如何配置git来实现你想要的功能,也许这是不可能的(但我相信人们会证明我是错的)。但是至少你可以对它进行一些小小的修改,以便得到你想要的结果。

你可以创建一个小脚本来检查 git diff --ignore-all-space --ignore-blank-lines 返回的是空还是有内容,然后输出标准的 nothing to commit, working tree clean 字符串或者执行真正的 git status 命令。

#!/bin/bash

diff=$(git diff --ignore-blank-lines --ignore-all-space)

if [[ -z $diff ]];
then
    echo -e "On branch $(git branch --show-current)\nnothing to commit, working tree clean"
else
    git status
fi

如果你将这个脚本放在全局/本地的.gitconfig中,那么就可以像调用git命令一样调用它。

# git config stuff
[alias]
    nw-status = "!p() { bash ~/path/to/script/git-nw-status.sh ; }; p"
请注意,这并不是你想要的完全一样。如果你有非空白和非换行符的更改,那么你将会看到 git status ,但是通过使用git diff 检查后,你还需要使用额外的命令来忽略空格和换行符。这可能会给你带来不便。

我认为这里存在一个问题,如果我有一个文件进行了一些更改,另一个文件只是添加了新行和其他空格更改,那么这可能仍然会显示两个文件。但是,是的!我发现这种方法更好,只需稍加调整,我们就可以创建一个git状态包装器。 - Shrijit Basak
嗯,有趣的是,在我的机器上,如果我有一个只有换行符的文件和另一个带有尾随空格的文件,脚本仍然可以正常工作。我猜这取决于你是否更改了 diff 命令。你有指定任何路径给它吗?否则,我很高兴这个脚本能够完成工作 :) - mnestorov

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接