【问题标题】:Git alias with shell variable expansions带有 shell 变量扩展的 Git 别名
【发布时间】:2011-11-29 12:08:25
【问题描述】:

我想在 git 别名中使用 shell 变量扩展来去除分支的前缀。不幸的是,当我使用“标准”别名时,变量扩展没有完成:

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

这实际上是在尝试推送一个名为“${$(git”) 的分支。但是如果我将别名更改为:

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

它通过 sh 运行并且无法进行我想要的替换。有什么解决方法吗?

【问题讨论】:

    标签: git shell


    【解决方案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 进行正则表达式替换。

    【讨论】:

    • @viraptor mmmm 如果这是解决方案,我会认真考虑只委托给一个适当的 bash 脚本,而不用为任何此类陈旧的东西烦恼:) 在 bash 脚本中,不会有任何意外和无限的选择.
    【解决方案2】:

    低级解释:${xxx} 语法总是需要 xxx 的变量名。它不会替换任意字符串。要使用##,必须:x=$(git symbolic-ref HEAD); echo ${x##refs/heads/};

    【讨论】:

    • 适用于 bash,但 zsh 确实支持它,因为 OP 编写了它。
    猜你喜欢
    • 2012-06-30
    • 1970-01-01
    • 2018-04-11
    • 2020-12-01
    • 2018-04-28
    • 2018-12-28
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多