我想知道如何在git repo中找到所有分支的最新标记。
我已尝试使用以下命令,但这只会检查当前分支:
git describe --abbrev=0 --tags | sed 's/[^0-9.]*//g'
我想检查所有分支。
答案 0 :(得分:1)
这是bash中的一个脚本。
#!/bin/bash
#list all the tags
git for-each-ref --shell refs/tags |
awk '{
#transform the object name into the commit date as a Unix epoch timestamp
"git log -1 --pretty=%cd --date=unix "$1 | getline $1;
#if the tag does not refer to a commit, ignore it
if($0 ~ /^[0-9a-f]/) print;
#sort by the timestamp reversely, from the youngest to the oldest
}' | sort -r |
#get the first youngest tag
head -1 | awk '{print $NF}' |
#get all the tags that point at this tag in case there are multiple youngest tags,
#with a side effect to remove "refs/tags/"
xargs -i git tag --points-at {}
单行版本:
git for-each-ref --shell refs/tags | awk '{"git log -1 --pretty=%cd --date=unix "$1 | getline $1;if($0 ~ /^[0-9a-f]/) print;}' | sort -r |head -1 | awk '{print $NF}' | xargs -i git tag --points-at {}
如果您在v2.9.4之前使用Git,请使用--date=iso
代替--date=unix
。对于--date=iso
,可能存在由于时区而无法按预期对时间戳进行排序的错误。但我认为这种情况很少发生。