这是git中非常基本的shell别名的一个例子
[alias]
em = "!git branch --merged | egrep -v '\\*\\|master' | xargs -L 1 -n 1 echo"
它回显了已经合并的分支,包括主分支(以及您当前的分支)。很简单。但是,运行此别名和脚本时结果会有所不同。例如:
will ~/example master
$ git branch --merged | egrep -v '\\*\\|master' | xargs -L 1 -n 1 echo
feature
will ~/example master
$ git em
feature
*
master
出于某种原因,egrep
条款甚至不会运行。实际上(因为我是OS X),它几乎就像运行grep
命令一样!像这样:(注意grep
vs egrep
)
will ~/example master
$ git branch --merged | grep -v '\\*\\|master' | xargs -L 1 -n 1 echo
feature
*
master
以前有人遇到过这个吗?
我已经阅读了这些SO问题,但他们并没有处理我的同样问题。最上面的一个是最接近的,但与shell命令别名的运行位置(repo的顶层)有关。
Why does running command as git alias gives different results?
Bash script produces different result when executed from shell prompt than executed by cron
答案 0 :(得分:2)
在定义之前,别名定义似乎经历了一定量的shell处理(或至少是反斜杠处理)。将另一组转义反斜杠添加到别名中。
[alias]
em = "!git branch --merged | egrep -v '\\\\*\\\\|master' | xargs -L 1 -n 1 echo"