不同软件的版本号含义可能不同
MongoDB 版本号
对于 MongoDB 2.4.1,
2.4
表示发行版本号而.1
表示修订版本号。发行版本号的第二个元素(比如2.4.1
中的4
)描述的是发行版本的类型。以偶数结尾(比如上面的4
)的发行版本号是稳定并且准备用于生产环境的,而奇数的仅用于开发和测试。
通常,发行版本号的变化(比如 2.2 到 2.4)表明引入了新功能并且可能会破坏向后兼容性。修订版本号的变化表示了修复 bug 的发布并且使向后兼容的。 -- 来自 https://docs.mongodb.com/manual/release-notes/#mongodb-version-numbers
MongoDB 驱动版本号
MongoDB 驱动使用语义化版本 -- 来自 https://docs.mongodb.com/manual/applications/drivers/#drivers-version-numbers
版本格式:主版本号.次版本号.修订号,版本号递增规则如下:
- 主版本号:当你做了不兼容的 API 修改,
- 次版本号:当你做了向下兼容的功能性新增,
- 修订号:当你做了向下兼容的问题修正。
可以看出,这个与上面的 MongoDB 版本号是不同的。
依赖的依赖
一个依赖也会有它自己的依赖。
比如 Python 的 Motor 依赖于 PyMongo
-- 来自 https://motor.readthedocs.io/en/stable/requirements.html#motor-and-mongodb
如果你是 Motor==0.4
,那么你的 PyMongo 版本必须为 2.8.0。如果你不知道这点,安装了 PyMongo 3.0+
从而覆盖了 PyMongo==2.8.0
,就会出问题。
应对不兼容的升级
如果升级的版本含有不向下兼容的改动,那么就要注意是否会对代码造成影响。
- 如果单元测试全部覆盖到了,那么升级版本后使单元测试再次通过就行
- 如果单元测试覆盖率不高或者没有单元测试,那么就需要把所有用到该依赖的地方查找出来,然后人肉对比是否有不兼容的地方或者手工测试
总结
- 由于不同依赖的版本号含义可能不同,所以升级依赖前需要弄清楚版本号的意思
- 如果项目有版本号,那么需要说明版本号的意思,比如“本项目版本号使用语义化版本”
- 注意依赖的依赖
- 单元测试对依赖的升级很有帮助