2014-09-20 28 views
2

我试图创建一个git别名来以特定的格式从日志中打印所有的pull请求。不过,我在使用AWK删除双空格时遇到了问题。git alias中的AWK语句

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

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

管道具有以下AWK指令I能打印出来,因为我想: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打印了沙:不是一个文件:

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

出了什么问题?我愿意使用其他工具,如sed,cut甚至是别名中的bash函数。

我在OS X Mavericks下。

回答

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脚本”中。

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,因此位置参数以人们期望它们的方式工作。

+0

它的工作!非常感谢你。 :) – betacar 2014-09-21 14:09:40