使用 JGit 获取分支中的最新标签
Get latest tag in branch with JGit
我正在尝试获取命令的 JGit 等价物
git describe --match "[0-9]*.[0-9]*.[0-9]*" --abbrev=0 --tags $(git rev-list --tags --branches=master --max-count=1)
我试过获取项目中的所有标签,然后通过 BranchListCommand 找到分支中最大的标签,但速度很慢。
我被卡住了,我无法通过搜索找到任何有用的东西。
有谁知道如何实现预期结果吗?
您可以获取所有标签,然后遍历分支上的提交并检查每个提交是否有此引用的标签。
即通过以下方式获取所有标签:
git.tagList().call()
然后通过以下方式获取分支的所有提交:
git.log().add(repository.resolve(BRANCH)).call()
然后为每次提交检查此引用是否存在标签。
当 运行 在分支上的相当大的存储库上提交超过 60k 时,以这种方式遍历所有提交在 1.2 秒内完成。
Had 60843 commits overall on branch remotes/origin/master, iteration took 1200ms
走 380k 次提交时,更大的分支需要 8 秒。
Had 388613 commits overall on branch remotes/origin/master, iteration took 8261ms
我已将准备好的 运行 片段添加到 jgit-cookboot, see ListTagsOnBranch.java
我正在尝试获取命令的 JGit 等价物
git describe --match "[0-9]*.[0-9]*.[0-9]*" --abbrev=0 --tags $(git rev-list --tags --branches=master --max-count=1)
我试过获取项目中的所有标签,然后通过 BranchListCommand 找到分支中最大的标签,但速度很慢。
我被卡住了,我无法通过搜索找到任何有用的东西。
有谁知道如何实现预期结果吗?
您可以获取所有标签,然后遍历分支上的提交并检查每个提交是否有此引用的标签。
即通过以下方式获取所有标签:
git.tagList().call()
然后通过以下方式获取分支的所有提交:
git.log().add(repository.resolve(BRANCH)).call()
然后为每次提交检查此引用是否存在标签。
当 运行 在分支上的相当大的存储库上提交超过 60k 时,以这种方式遍历所有提交在 1.2 秒内完成。
Had 60843 commits overall on branch remotes/origin/master, iteration took 1200ms
走 380k 次提交时,更大的分支需要 8 秒。
Had 388613 commits overall on branch remotes/origin/master, iteration took 8261ms
我已将准备好的 运行 片段添加到 jgit-cookboot, see ListTagsOnBranch.java