【问题标题】:git status to ignore newline and whitespace changesgit status 忽略换行符和空格的变化
【发布时间】:2020-07-29 04:53:02
【问题描述】:

我目前在 markdown 文件中维护我的笔记,但如果我打开现有文件,我使用的编辑器 (marktext) 会添加新的空行。

git 会跟踪添加的新空行,并且 git 会不断将这些文件显示为修改后的文件。有没有办法配置 git 在执行git status 时不跟踪此类更改,例如换行符和尾随空格?因为当我对这些特定文件执行git diff --ignore-all-space --ignore-blank-lines <path-to-file> 时,它根本没有显示任何变化。

提前致谢。

【问题讨论】:

    标签: git git-status


    【解决方案1】:

    我不知道如何配置 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
    

    然后你可以像 git 命令一样调用这个脚本,如果你把它放在你的全局/本地.gitconfig

    # git config stuff
    [alias]
        nw-status = "!p() { bash ~/path/to/script/git-nw-status.sh ; }; p"
    

    注意这并不是你想要的。如果您确实有非空格非换行符的更改,那么您将看到git status,但通过检查git diff,您还必须使用其他命令来忽略空格和换行符。这可能会给您带来不便。

    【讨论】:

    • 我认为这里存在一个问题,如果我有 1 个文件有一些更改,而另一个文件有新行和其他空白更改,那么这可能仍然会显示这两个文件。但是,是的!我发现这种方法好多了,只需稍作调整,我们就可以创建一个 git status 包装器
    • 嗯,有趣的是,在我的机器上,如果我有一个文件只有换行符,另一个文件有尾随空格,脚本仍然可以正常工作。我想这取决于您是否要更改 diff 命令。您是否指定了任何路径?否则我很高兴能完成这项工作:)
    【解决方案2】:

    您可以设置一个clean content filter driver as here,它会自动删除git diff/git commit 上的那些尾随空行。

    图片来自“ProGit book”的“Keyword Expansion”部分

    那个干净的脚本会trim any trailing empty lines

    # Delete all trailing blank lines at end of file (only).
    sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多