Git псевдоним с расширениями переменных оболочки

Я хотел бы использовать расширение переменной оболочки внутри псевдонима git для удаления префикса ветви. К сожалению, когда я использую "стандартный" псевдоним, расширение переменной не выполняется:

publish = push -u origin ${$(git symbolic-ref HEAD)##refs/heads/}

Это пытается на самом деле выдвинуть ветку с именем ${$(git). Но если я изменю псевдоним на:

publish = "!git push -u origin ${$(git symbolic-ref HEAD)##refs/heads/}"

он запускается через sh и не может выполнить замену, которую я хочу. Есть ли обходной путь?

2 ответа

Решение

Попробуйте изменить

!git push -u origin ${$(git symbolic-ref HEAD)##refs/heads/}

в

!git push -u origin `git symbolic-ref HEAD | sed -e "s#^refs/heads/##"`

Это использует sh кавычки для выполнения команд и sed сделать подстановку регулярного выражения.

Низкоуровневое объяснение: ${xxx} синтаксис всегда требует имя переменной для ххх. Он не заменяет произвольную строку. Чтобы использовать ##, нужно: x=$(git symbolic-ref HEAD); echo ${x##refs/heads/};

Другие вопросы по тегам