2014-09-20 78 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