Git shell命令别名出现“bad config file”错误

3
我正在研究以下git别名
[alias]
  pushup = !git push --set-upstream origin `git branch | egrep "^\*" | awk -F"*" '{print $NF}'`

这个命令应该完成git push并同时将upstream设置为当前分支。
命令是:
git push --set-upstream origin `git branch | egrep "^\*" | awk -F"*" '{print $NF}'`

这个命令在命令行中单独运行正常,但当我尝试将其作为git别名使用时出现“配置文件错误”的提示。

显然,我对git别名的格式存在一些误解。有人能帮我解释一下吗?


猜测一下,但是那个 ! 是怎么回事?!git 不应该是 git 吗? - Benjamin W.
2
@BenjaminW. 曾经在 git 别名中运行外部命令。(需要用到命令替换) - muru
2个回答

1

我不确定出了什么问题,但以下简化的别名对我有效:

[alias]
    pushup = !git push --set-upstream origin $(git branch | awk '/^*/{print $2}')

不要使用grep查找*并在其上进行拆分,您可以依赖于awk对空格的拆分,自动获取第二个字段作为分支名称,并使用awk来完成grep的工作。

Vim将\*标记为错误,当我尝试使用它时,我得到了您遇到的错误(我使用echo进行调试:D):

enter image description here

那就是错误的原因。我仍然不知道为什么。
我想你也可以使用来自此SO帖子的更简单的命令:
[alias]
    pushup = !git push --set-upstream origin $(git rev-parse --abbrev-ref HEAD)

非常好的答案。感谢您 A.) 告诉我如何使用 awk 做 grep 部分,和 B.) 一个更简洁的方法来获取当前分支的名称。 - Mark Biek

0
错误的原因是在解析别名时,\ 被识别为转义字符。解析器期望在 \ 后面有需要转义的内容,但星号并不符合要求。
你应该使用第二个反斜杠对 \ 进行转义,以使解析器满意并将其传递给 egrep。像这样:
[alias]
  pushup = !git push --set-upstream origin `git branch | egrep "^\\*" | awk -F"*" '{print $NF}'`

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接