次のものをに追加します.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
それ以外の場合はパッチを適用しなければ明らかな理由で使用できませんでした。