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/};