我正在尝试使用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做到这一点?
答案 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)