需要锦州网站建设外贸网站推广制作教程
1 版本号组成结构
Debian 版本号格式为:[epoch:]upstream_version[-debian_revision]
示例:2:1.18.3~beta+dfsg1-5+b1
| 组件 | 说明 | 比较优先级 | 
|---|---|---|
| Epoch | 冒号前的数字 (2:) | 最高 | 
| Upstream | 主版本 (1.18.3~beta+dfsg1) | 中 | 
| Debian修订号 | 减号后的部分 (5) | 最低 | 
2 核心比较规则
2.1 Epoch 比较
# 无Epoch默认为0
1.0 < 1:1.0   # 0:1.0 < 1:1.0
 
2.2 Upstream 版本比较
2.2.1 字符处理优先级(从高到低):
~ (波浪线) < 字母 < 数字 < 其他符号 (如 + . - _)
2.2.2 关键行为:
- 波浪线优先:标识预发布版本
 
1.0~beta < 1.0 < 1.0+alpha 
- 数字按数值比较
 
1.2 < 1.10   # 非字符串式比较 
- 字母按ASCII顺序
 
1.0a < 1.0b < 1.0beta < 1.0pre 
- 符号的特殊处理
 
1.0+2025 < 1.0+2026
1.0.dfsg < 1.0.dfsg1 
2.3 Debian修订号比较
1.0-9 < 1.0-10   # 修订号纯数字比较
1.0-1~beta < 1.0-1 
3 完整比较流程
- 拆分组件:
epoch:upstream-debian - 逐级比较:epoch → upstream → debian_revision
 - 分段处理(以非字母数字字符为分隔符)
 
比较 "1.0.3~rc1" → 分段为 [1, 0, 3, ~rc, 1] 
3.1 实战测试案例
| 版本A | 版本B | 比较结果 | 
|---|---|---|
2:1.5-3 | 1:9.0-1 | A > B (epoch 2 > 1) | 
1.18~beta | 1.18 | A < B (~优先级低) | 
2024.12.31 | 2024.3.15 | A > B (12 > 3) | 
1.0.0+dfsg1-4 | 1.0.0-4+dfsg1 | A > B (upstream中的+优先级高于debian修订号) | 
3.2 常见误区
字母大小写敏感
1.0A ≠ 1.0a   # ASCII值比较,'A'(65) < 'a'(97) 
修订号中的非数字处理
1.0-1a > 1.0-1   # 修订号分段比较,字符比空高 
空修订号处理
1.0 = 1.0-0      # 修订号不存在时视为0 
4 调试工具
# 使用 dpkg 命令测试比较
$ dpkg --compare-versions "1.0~beta" "lt" "1.0" && echo "符合预期"
符合预期# 生成版本比较报告
$ apt-get install devscripts
$ dpkg-parsechangelog -l../debian/changelog -SVersion
2:1.18.3~beta+dfsg1-5+b1
 
最佳实践
- 预发布标记:使用 
~标识beta/RC版本 - 日期版本:推荐格式 
YYYYMMDD(如20250228) - 复杂场景:通过 
dpkg --compare-versions验证比较逻辑 
可供--compare-versions 使用的比较运算符有:
  lt le eq ne ge gt        (如果版本号为空,那么就认为它先于任意版本号);
  lt-nl le-nl ge-nl gt-nl  (如果版本号为空,那么就认为它后于任意版本号);
  < << <= = >= >> >        (仅仅是为了与主控文件的语法兼容)。
