GitPython标签已排序

时间:2014-07-31 10:22:49

标签: python git sorting tags gitpython

我正在尝试使用GitPython lib获取repo中的最新标记。通常我这样做:

repo = Repo(project_root)
last_tag = str(repo.tags[-1])

但是一旦版本1.10发布,我总是得到1.9;(我知道它与输出git tag -l列出相同的订单有关。所以它将是1.1, 1.10, 1.2, ..., 1.9

问题是如何使用GitPython获取最新的标签? (我知道git tag -l | sort -V并且我知道如何解决这个问题而不使用repo对象。但也许有人知道在这个lib中获取排序标签列表时我缺少什么。

自定义排序功能也总是一个选项,但我仍然想知道是否有办法用GitPython做到这一点?

4 个答案:

答案 0 :(得分:13)

GitPython中clear clc close all %% Data Importation and Extraction load('testdata.mat'); increment = 1; x = [1:increment:length(PPG)]; d = deriv2(PPG); %% subplot 211 plot(x,PPG);xlim([0 100]);grid on subplot 212 plot(diff(diff(PPG)));xlim([0 100]);grid on 返回的$ cd ProjectFolder $ ionic serve 对象继承自IterableList python类,这意味着您可以按照自己的方式对其进行排序。要创建最新的标记,您只需执行以下操作:

repo.tags

答案 1 :(得分:3)

我刚看了一眼,找到了code responsible for the sorting。因此,除了自己反转排序顺序之外别无他法,例如

reversed(repo.tags)

如果愿意,您还可以使用底层的git命令,并自己解析结果,例如:在此示例中:

repo.git.tag(l=True) # equals git tag -l

这样,无论git tag可以做什么,你都可以这样做(按照从给定提交开始的遍历顺序列出标签可能会很有趣。)

答案 2 :(得分:2)

如果存在与标签相关联的不同提交(通常是这种情况),则上述操作将起作用。然而,更准确的方法是如下选择标签日期:

[{id: 5}, {id: 1}, {id: 2}, {id: 0}]

答案 3 :(得分:1)

排序以字母数字顺序完成,因此“1.9”排名高于“1.10”,因为它的排序是字符明智的,“9”> “1”。

如果你想要一个更合理的排序,你有两个选择:零填充你的版本号(1.09而不是1.9),这是首选,但事后很难实现它。

另一个是在python中对标签进行排序。 有一个名为natsort的库可以对各种数据进行自然排序。 但是对于这个简单的情况,你也可以使用排序函数的key参数:

nsort = lambda v:tuple(map(int, v.split('.')))
sorted(repo.tags, key=nsort)