次のものをに追加します.gitconfig。
anw = !git diff -U0 -w --no-color -- \"$@\" | git apply --cached --ignore-whitespace --unidiff-zero "#"
インスピレーションを得るための@Colin Herbertの回答に感謝します。
構文の説明
final #は引用符で囲む必要があるため、内ではコメントとして扱われません.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それ以外の場合はパッチを適用しなければ明らかな理由で使用できませんでした。