Per applicare i parametri aggiuntivi a qualsiasi cosa tranne la fine della "riga di comando" dell'alias, è necessario inserire i comandi della shell in uno script. Puoi farlo con uno script esterno (come jdelStrother’s answer), oppure puoi farlo con uno script di shell "in linea".
È possibile utilizzare -m
per alimentare git commit
il nuovo messaggio o utilizzare l'opzione -C HEAD
/--reuse-message=HEAD
di averlo utilizzare il messaggio e autore esistente (sarebbe anche riutilizzare il timestamp autore, ma si sta reimpostando che con --date=…
). L'utilizzo di una di queste opzioni impedirà a Git di aprire un editor per il tuo messaggio di commit.
Qui è come un “inline” script di shell:
git config --global alias.sync '!sh -c '\''git commit --amend --date=today ${1+-m} "${1---reuse-message=HEAD}" && git rebase master'\'' -'
Il nucleo di questo piccolo script è la coppia di espansioni di parametri condizionali:
${1+-m} "${1---reuse-message=HEAD}"
Quando si chiama con un extra parametro (cioè il tuo messaggio di log di sostituzione), questi si espandono in due parole di shell: -m "<your new log message>"
. Quando non si fornisce il parametro extra, si espandono su una singola parola: "--reuse-message=HEAD"
.
Anche il trattino finale è importante; potrebbe essere qualsiasi parola di shell, il punto è che qualcosa deve essere lì perché la shell lo userà per inizializzare il suo parametro $0
(che di solito ha un valore predefinito, quindi è inutile per l'espansione condizionale stessa).
Se ho capito male e che in realtà vogliono vedere l'editor quando non si specifica il parametro in più, quindi utilizzare il singolo espansione ${1+-m "$1"}
al posto della coppia di espansioni.
fonte
2011-07-09 04:41:56
Possibile duplicato di http://stackoverflow.com/q/3321492/923794 – cfi