将以下内容添加到您的.gitconfig:
anw = !git diff -U0 -w --no-color -- \"$@\" | git apply --cached --ignore-whitespace --unidiff-zero "#"
感谢@Colin Herbert的启发。
语法说明
最后的#引号必须加引号,这样就不会将其视为内的注释.gitconfig,而是传递给它,并当作外壳内的注释来处理-将其插入的末尾git apply和用户提供的参数之间,这些参数会git自动放在命令行的结尾。在这里不需要这些参数-我们不想git apply使用它们,因此不需要前面的注释字符。您可能需要运行此命令GIT_TRACE=1 git anw以查看其实际效果。
该--论点信号结束,并允许的情况下,你有一个文件名为-w或东西看起来像一个开关git diff。
需要使用转义的双引号$@来保留用户提供的任何带引号的参数。如果"字符未转义,则.gitconfig解析器将使用该字符,而不会到达外壳。
注:.gitconfig别名解析不承认单引号的任何特殊-它的唯一的特殊字符",\,\n,和;(一个外"-quoted字符串)。这就是为什么"必须始终将其转义的原因,即使它看起来像在单引号的字符串中(git完全不可知)。
这很重要,例如。如果您有方便的别名来bash在工作树的根目录中执行命令。错误的公式是:
sh = !bash -c '"$@"' -
正确的是:
sh = !bash -c '\"$@\"' -
git apply --ignore-whitespace由于明显的原因,我不得不使用该补丁。