2017-10-13 94 views
2

我的VCS具有這些標記混帳擊的正則表達式匹配最新的標籤

0.0.3.156-alpha+2 
0.0.3.154 
0.0.3.153 
build-.139 
build-.140 
build-.142 
build-0.0.1.28 
build-0.0.1.29 
build-0.0.1.30 
build-0.0.1.32 

我想git describe --match "<regex>"拿到形式number.number.number.number最新標籤(所以它列爲0.0。在這種情況下3.154)

我試圖與git describe --match "[0-9]*.[0-9]*.[0-9]*.[0-9]*$",但它不會導致任何東西,也不做這些模式:

"[0-9]*.[0-9]*.[0-9]*.[0-9]+" 
"[0-9]*.[0-9]*.[0-9]*.[0-9]{1,}" 

我需要在其他版本中獲得最新的標籤以供下一版本使用。所以我正在考慮自動這樣做。請讓我知道,如果我錯過了什麼

感謝

UPDATE:

在我的build.gradle文件我有一個函數來得到這樣的標籤(遵守@Marc回覆):

version getVersionFromTag() 

def getVersionFromTag() { 
    def stdout = new ByteArrayOutputStream() 
    exec { 
     commandLine 'git', 'tag', '|' , 'grep', '^\([0-9]\+\.\?\)\+$', '|', 'sort' , '-nr', '|', 'head', '-1' 
     standardOutput = stdout 
    } 
    return stdout.toString().trim() 
} 

這裏在上面的正則表達式中給出了錯誤Unexpected Char '\'。因此,我刪除他們變得'^([0-9]+.?)+$',那麼它運行良好,但在我最後的神器,它不具有版本附加的名稱(即helloword.jar代替helloword-0.0.3.154.jar

=>我的問題是我應該怎麼把@ Marc的提示?命令正確的gradle這個功能

+0

如果標記是最新創建的標記,那麼您可以使用'git describe --abbrev = 0'。或者我錯過了什麼? – crea1

+0

'--match'後面的模式是glob,而不是RegEx。試試'git describe | grep ...' – ElpieKay

+0

@ crea1該命令將僅返回最新的標籤(這裏是'0.0.3.156-alpha + 2')。我想要一個返回表格最新標籤的命令,比如'0.0.3.154' – hydradon

回答

1

爲了測試我已經把你的git describe的輸出文件這將做到:

cat file | grep '^\([0-9]\+\.\?\)\+$' | sort -nr | head -1 
0.0.3.154 

假設你已經創建了一些不正規格式的代碼,你想也使用這些(如你的build- -tags)找到最高標記:

sed -E 's/^[^0-9.]*//' | grep '^\([0-9]\+\.\?\)\+$' | sort -nr | head -1 
+0

嗨@Marc,你的命令在Git Bash命令行中很好用。在這裏,我想將你的建議解決方案放入Gradle函數中,但似乎有幾個問題,請參閱我的更新後的Post。謝謝 – hydradon