在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)
其他回答
对于刚才的问题,
如何获得当前分支中最新的标记名称
你想要的
git log --first-parent --pretty=%d | grep -m1 tag:
——first-parent告诉git log不要详述任何合并的历史,——pretty=%d表示只显示装饰,即任何提交的本地名称。Grep -m1表示“只匹配一个”,因此您只获得最近的标记。
git describe --abbrev=0 --tags
如果你没有看到latest标签,请确保在运行之前获取origin:
git remote update
如果您需要最后两个标记(例如,为了生成当前标记和前一个标记之间的更改日志),下面的工作对我来说是有效的。我只在最新标签是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巫师,我相信它可以进一步改进。我还怀疑如果提交历史向前移动,它会中断。我只是想说点有用的。
所有的建议都有什么问题(除了Matthew Brett的解释,到目前为止)?
当你在不同的历史点时,只需运行其他jQuery Git历史上提供的任何命令,并使用可视化标签历史表示检查结果(我这样做就是为什么你看到这篇文章):
$ git log --graph --all --decorate --oneline --simplify-by-decoration
今天,许多项目在独立于主线的分支中执行发布(以及标记)。
这是有充分理由的。看看那些已经建立好的JS/CSS项目就知道了。出于用户约定,它们在DVCS中携带二进制/最小化的发布文件。当然,作为项目维护者,你不希望用无用的二进制blob来垃圾你的主线差异历史,并在主线之外执行构建工件的提交。
因为Git使用DAG而不是线性历史——很难定义距离度量,所以我们可以说——哦,那个rev最接近我的HEAD!
我开始了我自己的旅程(看看里面,我没有复制花哨的证明图片到这篇长文章中):
关于Git中的分支,过去最近的标记是什么?
目前我对标签与修订之间的距离有4个合理的定义,但有用性在降低:
从HEAD到合并base与tag的最短路径长度 HEAD和标签之间合并基础的日期 从HEAD可达但从tag不可达的转数 标签的日期,无论合并基础
我不知道如何计算最短路径的长度。
脚本,根据HEAD和标签之间的合并基础的日期排序标签:
$ git tag \
| while read t; do \
b=`git merge-base HEAD $t`; \
echo `git log -n 1 $b --format=%ai` $t; \
done | sort
它适用于大多数项目。
根据可从HEAD到达但无法从标签到达的转速数对标签进行排序的脚本:
$ git tag \
| while read t; do echo `git rev-list --count $t..HEAD` $t; done \
| sort -n
如果你的项目历史在提交时有奇怪的日期(因为重基或另一个历史重写或一些白痴忘记更换BIOS电池或其他你对历史所做的魔法),请使用上面的脚本。
对于最后一个选项(标签的日期,无论合并基础),以获得按日期排序的标签列表使用:
$ git log --tags --simplify-by-decoration --pretty="format:%ci %d" | sort -r
要获得当前的修订日期,请使用:
$ git log --max-count=1
注意,git describe——tags在它自己的情况下有用途,但不是用于在项目历史中寻找人类期望的最近的标签。
注意:你可以在任何版本中使用上述食谱,只需将HEAD替换为你想要的!
git tag -l ac* | tail -n1
获取最后一个以“ac”为前缀的标签。例如,命名为ac1.0.0或ac1.0.5的标记。其他名为1.0.0、1.1.0的标记将被忽略。
git tag -l [0-9].* | tail -n1
获取最后一个标记,其第一个字符为0-9。因此,第一个字符为a-z的标签将被忽略。
更多信息
git tag --help # Help for `git tag`
git tag -l <pattern>
列出名称与给定模式匹配的标签(如果不匹配则全部匹配) 给出了模式)。运行不带参数的“git tag”也会列出列表 所有的标记。模式是一个shell通配符(即匹配使用 :(3))。可以给出多个模式;如果有的话 匹配时,显示标记。
tail -n <number> # display the last part of a file
tail -n1 # Display the last item
更新
用git标签,帮助,关于排序参数。默认情况下,它将使用字典顺序,if标记。排序属性不存在。
排序顺序 默认为为标记配置的值。对变量进行排序 存在,否则按字典顺序。看到git-config(1)。
谷歌之后,有人说git 2.8.0支持以下语法。
git tag --sort=committerdate