一个git别名里面的AWK语句

时间:2014-09-20 22:57:43

标签: git bash shell awk alias

我正在尝试创建一个git别名,以特定格式打印日志中的所有拉取请求。但是我在使用AWK时遇到了删除双重空格的问题。

这是使用此命令从git log输出的:git log --merges --grep="pull request" --pretty=format:"[%h] %s %b" [SHA]..HEAD

  

[5c420cb]从repo_name / branch_name合并拉取请求#001拉取请求标题

使用以下AWK命令进行管道我可以按照自己的意愿打印它:awk '{$2=$3=$4=$6=$7=""; gsub(/ +/," ",$0); $2=$2 ":"; print}'

  

[5c420cb]#001:提取请求标题

但是,粘贴git别名中的所有内容

[alias]
    release = !"git log --merges --grep=\"pull request\" --pretty=format:\"[%h] %s %b\" $1..HEAD | awk '{$2=$3=$4=$6=$7=\\\"\\\";gsub(/ +/,\\\" \\\",$0);$2=$2 \\\":\\\";print}'"

AWK打印出[SHA]不是文件:

$ git release SHA
awk: can't open file SHA
 source line number 1

可能有什么不对?我可以使用其他工具,例如sedcut甚至是别名内的bash函数。

我是OS X Mavericks。

1 个答案:

答案 0 :(得分:3)

当git调用你的别名时,它会将你的参数粘贴在命令的末尾并运行它。

使用转换为的别名(手动取消引用以忽略引用错误):

git log --merges --grep="pull request" --pretty=format:"[%h] %s %b" $1..HEAD | awk '{$2=$3=$4=$6=$7=\\"\\";gsub(/ +/,\\" \\",$0);$2=$2 \\":\\";print}' SHA

此时$1扩展为空,git看到..HEAD(这是完全合理的)。

awk看到SHA的参数不存在并触发错误(并导致它忽略stdin)。

您需要将管道包装在" shell脚本中#34;。

release = "!bash -c 'git log --merges --grep=\"pull request\" --pretty=format:\"[%h] %s %b\" $1..HEAD | awk \"{\\$2=\\$3=\\$4=\\$6=\\$7=\\\"\\\";gsub(/ +/,\\\" \\\",\\$0);\\$2=\\$2 \\\":\\\";print}\"' -"

有可能以一种不那么糟糕的引用方式做到这一点,但这种格式对我有用,所以我一直坚持下去。

最后的-参数是将$0参数填充到该shell中,以便位置参数按照人们期望的方式工作。