Ili*_*tko 9 python tags git sorting gitpython
我正在尝试使用GitPython lib获取repo中的最新标记.通常我这样做:
repo = Repo(project_root)
last_tag = str(repo.tags[-1])
Run Code Online (Sandbox Code Playgroud)
但是一旦版本1.10发布,我总是得到1.9;(我知道它与输出git tag -l
列出相同的订单有关.所以它将是1.1, 1.10, 1.2, ..., 1.9
问题是如何使用GitPython获取最新的标签?(我知道git tag -l | sort -V
并且我知道如何解决这个问题而不使用repo对象.但是也许有人知道在这个lib中获取排序标签列表时我缺少什么)
自定义排序功能也总是一个选项,但我仍然想知道是否有办法用GitPython做到这一点?
rob*_*aos 14
GitPython IterableList
返回的对象repo.tags
继承自list
python类,这意味着您可以按照自己的方式对其进行排序.要创建最新的标记,您可以简单地执行以下操作:
import git
repo = git.Repo('path/to/repo')
tags = sorted(repo.tags, key=lambda t: t.commit.committed_datetime)
latest_tag = tags[-1]
Run Code Online (Sandbox Code Playgroud)
小智 6
如果存在与标签关联的不同提交(通常是这种情况),则上述方法将起作用。然而,更准确的方法是获取标签日期:
import git
repo = git.Repo('path/to/repo')
tags = sorted(repo.tags, key=lambda t: t.tag.tagged_date)
latest_tag = tags[-1]
Run Code Online (Sandbox Code Playgroud)
我刚刚看了一下,发现了负责排序的代码。因此,我别无选择,只能自己反转排序顺序,例如
reversed(repo.tags)
Run Code Online (Sandbox Code Playgroud)
如果愿意,您还可以使用底层 git 命令,并自己解析结果,如下例所示:
repo.git.tag(l=True) # equals git tag -l
Run Code Online (Sandbox Code Playgroud)
这样,无论你git tag
能做什么,你都可以做(这对于从给定的提交开始按遍历顺序列出标签可能很有趣)。
归档时间: |
|
查看次数: |
5996 次 |
最近记录: |