Reputation: 34145
I'd like to use a shell variable expansion inside of a git alias to strip a prefix of a branch. Unfortunately when I use the "standard" alias, variable expansion is not done:
publish = push -u origin ${$(git symbolic-ref HEAD)##refs/heads/}
This is trying to actually push a branch called "${$(git". But if I change the alias to:
publish = "!git push -u origin ${$(git symbolic-ref HEAD)##refs/heads/}"
it's run via sh and fails to do the substitution I want. Is there some workaround?
Upvotes: 4
Views: 1139
Reputation: 10551
Low-level explanation: The ${xxx}
syntax always requires a variable name for xxx. It does not substitute an arbitrary string. To use ##, one would have to: x=$(git symbolic-ref HEAD); echo ${x##refs/heads/};
Upvotes: 1
Reputation: 15502
Try changing
!git push -u origin ${$(git symbolic-ref HEAD)##refs/heads/}
to
!git push -u origin `git symbolic-ref HEAD | sed -e "s#^refs/heads/##"`
This uses sh
backticks to execute commands and sed
to do the regular expression substitution.
Upvotes: 1