我刚刚注意到 Wine(和许多其他软件包)已将其版本控制方案转变为如下形式:
1:1.6.2-0ubuntu3
我都明白了后the 1:
…但是the1:
指的是什么?
它似乎没有镜像主要版本。查看待处理升级列表,有类似这样的版本:2:4.1.3...
并且有很多没有#:
前缀的软件包。
这是怎么回事?
答案1
从man deb-version
:
NAME deb-version - Debian package version number format SYNOPSIS [epoch:]upstream-version[-debian-revision] DESCRIPTION Version numbers as used for Debian binary and source packages consist of three components. These are: epoch This is a single (generally small) unsigned integer. It may be omitted, in which case zero is assumed. If it is omitted then the upstream-version may not contain any colons. It is provided to allow mistakes in the version numbers of older versions of a package, and also a package's previous version numbering schemes, to be left behind.
因此,这个额外的数字(就你的情况而言1
)指的是时代成分可以省略,在这种情况下假定为 0。因此,如果您看到一个版本字符串,它看起来像,1.6.2-0ubuntu3
您可以认为它实际上看起来像0:1.6.2-0ubuntu3
。这有什么用,以及它是如何实现的:它允许保留软件包旧版本的版本号错误以及软件包以前的版本编号方案为了更好地理解,请仔细阅读以下解释性段落Debian 政策手册 - 控制文件及其字段:
比较两个版本号时,首先时代比较每个,然后上游版本如果时代相等,然后 debian_修订版本如果上游版本也相等。时代进行数值比较。
和:
请注意,epoch 的目的是让我们能够遗漏版本编号中的错误,并应对版本编号方案发生变化的情况。不是旨在处理包含包管理系统无法解释的字符串的版本号(例如
ALPHA
或pre-
),或包含愚蠢的排序。
答案2
这是纪元。它会覆盖版本来确定两个软件包中哪一个较新:
从deb-version
手册页中:
epoch This is a single (generally small) unsigned integer. It may be
omitted, in which case zero is assumed. If it is omitted then
the upstream-version may not contain any colons.
It is provided to allow mistakes in the version numbers of older
versions of a package, and also a package's previous version
numbering schemes, to be left behind.
答案3
具体例子
这里有一个具体的例子,可以最大限度地提高你的理解速度。
假设原始包有以下版本:
2019.1
2019.2
1.2
(原始包决定随机更改发布命名方案)1.3
然后 Debian 将它们视为:
0:2019.1
(通常简称为,因为可以省略2019.1
前导)0:
0:2019.2
1:1.2
(Debian 将纪元从 0 提升到 1 以适应新的命名方案)1:1.3
这样,我们仍然可以从软件包版本字符串中清楚地知道版本顺序,或者如果原始软件包在新方案中犯了重用旧名称版本的大错,我们就可以完全区分它们。
您能想象 Debian 开发人员必须适应什么样的地狱般的事情吗?:-)