我需要Git命令到獲取/查找最後一個標籤'v'獲得最後版本提交(我在開始時使用v字母標記標記下一個應用程序版本(例如:v0.9.1beta)如何獲得最後一個Git標籤匹配正則表達式標準
有沒有辦法做到這一點
我需要Git命令到獲取/查找最後一個標籤'v'獲得最後版本提交(我在開始時使用v字母標記標記下一個應用程序版本(例如:v0.9.1beta)如何獲得最後一個Git標籤匹配正則表達式標準
有沒有辦法做到這一點
我使用下面的命令爲這個:?
git describe --match "v[0-9]*" --abbrev=4 HEAD
如果自上次版本化標記以來您對源代碼樹執行了某些操作,它也將修改版本。
請注意,這是而不是正則表達式,但一個glob,但適用於提供的示例。
如果您只想使用「--abbrev = 0」的標籤,使用「short output」。 – 2013-08-17 02:11:44
['git describe' doc](https://git-scm.com/docs/git-describe)表示'--match'採用了glob,而不是正則表達式。 – 2016-10-28 04:51:49
@CraigMcQueen是一個glob,這就是爲什麼它工作並過濾掉'v1.0.0'而不是'v1234'。我添加了一個註釋來澄清這一點。 – 2016-10-28 07:36:36
git tag -l -n v*
它列出了所有標籤匹配條件。我只需要最後一個,所以git描述--match v *。無論如何感謝提示標籤和描述命令鏈接在一起的git手冊頁。 – Lukasz 2010-10-05 21:17:47
git describe --match v*
使用此。
這將包括所有以'v'開頭的標籤,所以它會列出所有字不只是版本 – 2010-10-05 21:21:24
是的......這是真的。無論如何,我標記你的正則表達式是解決我的問題。我應該刪除這個答案嗎? – Lukasz 2010-10-06 00:21:52
感謝您的接受!不,我認爲不需要刪除這個答案。 – 2010-10-06 08:42:33
我使用
git tag -l --format "%(objecttype) %(refname:short)" --sort=-version:refname --merged HEAD "v*"
git tag
解釋圖案作爲水珠。所以你不能指定一個完整的正則表達式。只需使用最小glob(v *)甚至不使用glob。您將以排序順序(最高標記版本優先)獲得多於一個匹配標記,然後您將能夠將輸出與之後的表達式進行正則表達式匹配。
KARASZI István's answer已經解釋瞭如何找到與glob匹配的標籤,這通常足夠好。如果你曾經需要雖然是真正的正則表達式:
for tag in $(git tag | grep YOURREGEX); do
git describe --tags --long --match="$tag" 2>/dev/null
done | sort -k2 -t"-" | head -n1
--abrev=0
將實現),追加| cut -d"-" -f1
--long
的行爲也輸出,確切地說匹配標籤包括-0-hash
部分,而是附加| sed -e's/-0-.*$//'
。問題的示例標籤可能會使用正則表達式^v\d+\.\d+\.\d+\D*$
(儘管\D*$
可能是可選的)。
...雖然這在性能方面明顯更差,因爲'git describe'是爲匹配RegEx的_each_標籤運行的。 – 2017-02-09 08:22:33
感謝這:) – 2017-02-27 18:42:38
雖然單個正則表達式--match "v[0-9]*"
就夠這裏,知道了Git 2.13(Q2 2017)將改善是:
「
git describe
」和「git name-rev
」已經被教導要花費超過一個refname模式限制這組參考文件將其 命名輸出作爲基礎,並且還學會了將 的負模式用於名稱,因爲名稱不適用於通過它們的「--exclude
」選項進行命名。
通過Jacob Keller (jacob-keller
)參見commit 77d21f2,commit 43f8080,commit 96415b4,commit 290be66,commit 4a68748(2017年1月18日)。
(在commit 1b32498由Junio C Hamano -- gitster
--合併,2017年2月27日)
你現在可以有multiple match pattern:
--match <pattern>:
只考慮標籤匹配給定
glob(7)
模式,不包括「裁判/標籤/ 「 字首。
這可以用來避免從存儲庫泄漏專用標籤。如果給定多次,模式列表將被累積,並且將考慮匹配任何模式的標籤。
使用--no-match
清除並重置模式列表。
而且你還有一個exclude pattern (or several) now!
--exclude <pattern>::
不考慮標籤匹配給定
glob(7)
模式,不包括 的 「裁判/標籤/」 前綴。這可用於縮小標籤空間並僅查找符合某些有意義標準的標籤。
如果給定多次,模式列表將被累計,並且匹配任何模式的標籤將被排除。
當與--match
結合使用時,當至少匹配一個--match
圖案並且不匹配任何--exclude
圖案時,將會考慮標籤。使用--no-exclude
清除並重置模式列表。
使用git describe
爲其他答案的問題做是git describe
會告訴你,是從頭部到達標籤(或提交指定。)
想象一下,你有3個標籤,V1,V2,和v3。如果HEAD位於v2和v3之間,則git describe
將返回v2而不是v3。
如果您確實需要最新的標籤,首先您需要帶註釋的標籤,因爲輕量級標籤沒有日期元數據。
然後,此命令將做到這一點:
git for-each-ref --sort=-taggerdate --count=1 refs/tags/v*
可你只需要使用'混帳describe'? – Daenyth 2010-10-05 21:07:01
是的.. git describe --match v *是我需要的。謝謝。 – Lukasz 2010-10-05 21:16:05
有人可以編輯標題,因爲這是不需要真正使用正則表達式。所有的答案都只是使用匹配和「glob」模式。謝謝。 – d4Rk 2014-11-28 13:57:05