使用simple-git获取Git最新标签提交哈希遇排序问题求解决
解决simple-git获取最新标签提交哈希的问题
方案1:让Git标签按版本号排序后获取哈希
Git的tag命令支持通过--sort参数指定排序规则,使用--sort=-v:refname可以让标签按版本号倒序排列(替代默认的字典序),这样就能直接拿到最新标签的哈希值。
修改后的代码如下:
const tagsOutput: string = await git.tag({ '--list': null, '--format': '%(objectname:short)', '--sort': '-v:refname' // 按版本号倒序排序 }); const commitLastTag = tagsOutput.trim().split('\n')[0] || 'HEAD~1'; // 倒序排列后第一个结果就是最新标签的哈希,无需用pop
方案2:通过simple-git的raw方法执行原生git describe命令
虽然simple-git没有封装describe方法,但可以用raw方法直接调用原生Git命令,先拿到最新标签名,再获取对应的提交哈希:
步骤1:获取最新标签名
const latestTagName: string = await git.raw(['describe', '--abbrev=0', '--tags']); const trimmedTagName = latestTagName.trim();
步骤2:根据标签名获取提交哈希
方法一:用tag命令查询指定标签的哈希
const tagHashOutput: string = await git.tag({ '--list': trimmedTagName, '--format': '%(objectname:short)' }); const commitLastTag = tagHashOutput.trim() || 'HEAD~1';
方法二:用show命令直接获取标签对应的提交哈希
const hashOutput: string = await git.raw(['show', '-s', '--format=%h', `${trimmedTagName}^{commit}`]); const commitLastTag = hashOutput.trim() || 'HEAD~1';
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

