我正在尝试创建一个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
可能有什么不对?我可以使用其他工具,例如sed
,cut
甚至是别名内的bash函数。
我是OS X Mavericks。
答案 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中,以便位置参数按照人们期望的方式工作。