abdelrahman / 语义化版本控制
用于管理语义版本的PHP包
1.0.1
2018-04-16 17:34 UTC
Requires
- php: ~7.1
Requires (Dev)
- phpunit/phpunit: ~7
This package is not auto-updated.
Last update: 2024-09-18 10:59:17 UTC
README
用于解析、比较和修改语义版本的PHP包
关于语义版本的一些理论
什么是语义版本?
-
它是一组规则或约定,用于记录软件的版本
-
软件可以是项目、包或API
更详细的解释可以在 => https://semver.org/
语义版本的各个部分
常规版本
-
语义版本的第一部分,也是最重要的部分
-
由三个标识符组成:主要.Minor.Patch
-
这三个标识符必须是(无前导零的非负整数)[0-9]
-
主要标识符不能为零
-
次要和补丁标识符可以是零
-
主要标识符的优先级高于次要标识符,次要标识符的优先级高于补丁标识符
-
示例:1.0.0 或 1.1.1 或 2.9.4
预发布版本
-
语义版本的第二部分
-
在常规版本之后,以连字符 - 开始
-
由一个或多个非空标识符组成,由 . 分隔
-
标识符必须是(带/不带连字符的字母数字字符)[0-9A-Za-z-] 或(无前导零的非负整数)[0-9]
-
字母数字标识符的优先级高于整数标识符
-
预发布版本的优先级低于常规版本
-
示例:1.0.0-alpha 或 1.0.0-alpha.1 或 1.0.0-0.3.7 或 1.0.0-x.7.z.92
构建元数据
-
语义版本的第三部分
-
在常规版本或预发布版本之后,以加号 + 开始
-
由一个或多个非空标识符组成,由 . 分隔
-
标识符必须是(带/不带连字符的字母数字字符)[0-9A-Za-z-] 或(无前导零的非负整数)[0-9]
-
构建元数据在比较两个语义版本时没有优先级
-
示例:1.0.0-alpha+001 或 1.0.0+20130313144700 或 1.0.0-beta+exp.sha.5114f85
包安装
$ composer require abdelrahman/semantic-versioning
包使用
use Abdelrahmanrafaat\SemanticVersion\SemanticVersion;
$packageVersion = (new SemanticVersion)->setVersion('1.3.0-beta+exp.sha.5114f85');
$packageVersion->getFullVersion(); //1.3.0-beta.1+exp.sha.5114f85
$packageVersion->getNormalVersion(); //1.3.0
$packageVersion->getPreRelease(); //beta.1
$packageVersion->getBuildMetaData(); //exp.sha.5114f85
$packageVersion->getMajorVersion(); //1
$packageVersion->getMinorVersion(); //3
$packageVersion->getPatchVersion(); //0
$packageVersion->pumpMajor();
$packageVersion->getMajorVersion(); //2
$packageVersion->getNormalVersion(); //2.0.0
$packageVersion->pumpMinor();
$packageVersion->getMinorVersion(); //1
$packageVersion->getNormalVersion(); //2.1.0
$packageVersion->pumpPatch();
$packageVersion->getPatchVersion(); //1
$packageVersion->getNormalVersion(); //2.1.1
比较两个版本
- 取决于常规版本和预发布版本的优先级
- 比较两个语义版本时忽略构建元数据
$firstVersion = (new SemanticVersion)->setVersion('1.1.1');
$secoundVersion = (new SemanticVersion)->setVersion('1.1.1');
$firstVersion->equals($secoundVersion); //true
$firstVersion->pumpMajor();
$firstVersion->equals($secoundVersion); //false
$firstVersion->greaterThan($secoundVersion); //true
$secoundVersion->lessThan($firstVersion); //true
$firstVersion = (new SemanticVersion)->setVersion('1.0.0-alpha');
$secoundVersion = (new SemanticVersion)->setVersion('1.0.0-rc');
$firstVersion->equals($secoundVersion); //false
$firstVersion->lessThan($secoundVersion); //true
$secoundVersion->greaterThan($firstVersion); //true