Aggiungi quanto segue al tuo .gitconfig
:
anw = !git diff -U0 -w --no-color -- \"$@\" | git apply --cached --ignore-whitespace --unidiff-zero "#"
Grazie alla risposta di @Colin Herbert per l'ispirazione.
Sintassi Spiegazione
Il finale #
deve essere citato in modo da non essere trattato come un commento all'interno di .gitconfig
, ma viene invece passato e viene trattato come un commento all'interno della shell: viene inserito tra la fine git apply
dell'argomento e gli argomenti forniti dall'utente che git
si posizionano automaticamente nel fine della riga di comando. Questi argomenti non sono desiderati qui - non vogliamo git apply
consumarli, quindi il carattere di commento precedente. Potresti voler eseguire questo comando GIT_TRACE=1 git anw
per vederlo in azione.
Il --
segnale termina gli argomenti e consente il caso in cui si abbia un file denominato -w
o qualcosa che sembrerebbe un passaggio a git diff
.
Le virgolette doppie con escape $@
sono necessarie per preservare tutti gli argomenti quotati forniti dall'utente. Se il "
personaggio non è sfuggito, verrà consumato dal .gitconfig
parser e non raggiungerà la shell.
Nota: .gitconfig
alias analisi non riconosce apostrofi come qualcosa di speciale - i suoi personaggi solo speciali sono "
, \
, \n
e ;
(al di fuori di una "
stringa di -quoted). Questo è il motivo per cui a "
deve sempre essere evitato, anche se sembra che sia all'interno di una stringa a virgoletta singola (di cui git è completamente agnostico).
Questo è importante, ad es. se hai un utile alias per eseguire un bash
comando nella radice dell'albero di lavoro. La formulazione errata è:
sh = !bash -c '"$@"' -
Mentre quello corretto è:
sh = !bash -c '\"$@\"' -
git apply --ignore-whitespace
altrimenti la patch non si applicava per ovvi motivi.