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 applydell'argomento e gli argomenti forniti dall'utente che gitsi posizionano automaticamente nel fine della riga di comando. Questi argomenti non sono desiderati qui - non vogliamo git applyconsumarli, quindi il carattere di commento precedente. Potresti voler eseguire questo comando GIT_TRACE=1 git anwper vederlo in azione.
Il --segnale termina gli argomenti e consente il caso in cui si abbia un file denominato -wo 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 .gitconfigparser e non raggiungerà la shell.
Nota: .gitconfigalias analisi non riconosce apostrofi come qualcosa di speciale - i suoi personaggi solo speciali sono ", \, \ne ;(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 bashcomando nella radice dell'albero di lavoro. La formulazione errata è:
sh = !bash -c '"$@"' -
Mentre quello corretto è:
sh = !bash -c '\"$@\"' -
git apply --ignore-whitespacealtrimenti la patch non si applicava per ovvi motivi.