viraptor
viraptor

Reputation: 34145

Git alias with shell variable expansions

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

Answers (2)

jørgensen
jørgensen

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

Go Dan
Go Dan

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

Related Questions