在Git中获取最新标签的最简单方法是什么?
git tag a HEAD
git tag b HEAD^^
git tag c HEAD^
git tag
输出:
a
b
c
我应该写一个脚本来获得每个标记的日期时间并比较它们吗?
在Git中获取最新标签的最简单方法是什么?
git tag a HEAD
git tag b HEAD^^
git tag c HEAD^
git tag
输出:
a
b
c
我应该写一个脚本来获得每个标记的日期时间并比较它们吗?
当前回答
你可以执行:git describe——tags $(git rev-list——tags——max-count=1)这里谈到:如何获得最新的标签名称?
其他回答
如果您需要最后两个标记(例如,为了生成当前标记和前一个标记之间的更改日志),下面的工作对我来说是有效的。我只在最新标签是HEAD的情况下测试过它。
PreviousAndCurrentGitTag=`git describe --tags \`git rev-list --tags --abbrev=0 --max-count=2\` --abbrev=0`
PreviousGitTag=`echo $PreviousAndCurrentGitTag | cut -f 2 -d ' '`
CurrentGitTag=`echo $PreviousAndCurrentGitTag | cut -f 1 -d ' '`
GitLog=`git log ${PreviousGitTag}..${CurrentGitTag} --pretty=oneline | sed "s_.\{41\}\(.*\)_; \1_"`
它适合我的需求,但因为我不是git巫师,我相信它可以进一步改进。我还怀疑如果提交历史向前移动,它会中断。我只是想说点有用的。
如果你的标签是可排序的:
git tag --merged $YOUR_BRANCH_NAME | grep "prefix/" | sort | tail -n 1
git log --tags --no-walk --pretty="format:%d" | sed 2q | sed 's/[()]//g' | sed s/,[^,]*$// | sed 's ...... '
如果你还需要更多的标签
(git描述-标签有时会给出错误的哈希值,我不知道为什么,但对我来说-max-count 2不工作)
这就是你如何按时间顺序获得最新2个标签名称的列表,在git 1.8.4上完美工作。 对于早期版本的git(如1.7.*),输出中没有“tag:”字符串——只是删除最后一次sed调用
如果你想要两个以上的最新标签-将这个“sed 2q”改为“sed 5q”或任何你需要的
然后,您可以轻松地将每个标记名称解析为变量。
在CI/CD进程中描述的问题是,您可能会遇到致命的问题:没有标签可以描述错误。
这将会发生,因为,per git describe——help:
该命令查找可从提交中访问的最新标记。
如果你想要repo中最新的标签,不管你所在的分支是否可以到达这个标签,通常是因为它不是当前分支树的一部分,这个命令会给你整个repo中最近创建的标签:
git tag -l --sort=-creatordate | head -n 1
如果你需要一个获得当前分支上最新标签名称(通过标签日期)的一行程序:
git for-each-ref refs/tags --sort=-taggerdate --format=%(refname:short) --count=1 --points-at=HEAD
我们使用它来设置设置中的版本号。
输出的例子:
v1.0.0
也适用于Windows。