2016-09-24 57 views
1

假設我有以下查詢:你可以把git日誌日誌正則表達式匹配組放在git漂亮的輸出中嗎?

git log -100 -i --grep="^\[.*JIRA.*\]" 

這是假定一個git評論像

"[JIRA1234] Adding the graph to the customer balance page" 

然後我想格式化輸出,顯示只是匹配組如[JIRA1234]

現在,我想我應該能夠做到這一點:

git log -100 -i --grep="^\[.*JIRA.*\]" --pretty="%1" 

但是,這並不工作。

另一種方式來做到這一點是通過管道進入grep的

git log -100 -i --grep="^\[.*JIRA.*\]" --pretty=oneline | grep -o '\[.*JIRA.*' 

但你失去添加作者姓名和其他技巧與git log --pretty輸出的能力。

我的問題是:你可以把git log log正則表達式匹配組放在git漂亮的輸出中嗎?

回答

0

我找不到任何直接處理此請求的方法。如果模式"^\[.*JIRA.*\]"在提交日誌信息中只發生一次,這個命令可以幫助:

git log -100 -i --grep="^\[.*JIRA.*\]" --pretty=%H | while read line 
do 
    p=$(git log -1 $line --pretty=%B | grep -i -o -e "^\[.*JIRA.*\]") 
    git log -1 $line --pretty="$p %h %an %cn foo bar" 
done 

如果發生拍打多次,還需要一些額外的命令,如head -1或其他while循環。

+0

愚蠢的問題 - 如果你把它變成grep,你爲什麼需要兩次git日誌?爲什麼你不能像使用管道grep一樣在問題示例中使用它? – hawkeye

+0

@hawkeye在while循環中,第一個獲取匹配模式的字符串的第一個git日誌,第二個獲取格式日誌。 '--pretty = oneline'忽略提交日誌消息的主體,但只顯示主題。此外,你的例子可能比模式更匹配。 – ElpieKay

+0

任何時候你的'--pretty'格式只是'%H',你可能直接使用'git rev-list'('git log'和'git rev-list'採取相同的選項,因爲它們是就源代碼而言幾乎只有一個命令)。 (我現在更喜歡'--no-walk'到'-1',儘管這實際上更長時間來表達:-)並且性能基本相同。) – torek