将以下内容添加到您的.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
由于明显的原因,我不得不使用该补丁。