2011-11-29 45 views
4

我想在git別名內部使用shell變量擴展來去除分支的前綴。不幸的是,當我使用「標準」的別名,變量擴展不這樣做:使用shell變量擴展的Git別名

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

這是試圖真正推動一個名爲「$ {$(GIT」分支,但如果我改變別名:

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

它通過SH運行,並沒有做我想做的替代。有一些解決方法嗎?

回答

1

嘗試改變

!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做正則表達式替換。

+0

@viraptor mmmm如果這是解決方案,我會認真考慮只是委託給一個bash腳本本身,而不是打擾任何這樣的陳舊:)在bash腳本中,會有沒有驚喜和無限的選擇。 – sehe

0

低級解釋:對於xxx,${xxx}語法始終需要變量名稱。它不會替換任意字符串。要使用##,你必須:x=$(git symbolic-ref HEAD); echo ${x##refs/heads/};