abdelrahman/语义化版本控制

用于管理语义版本的PHP包

1.0.1 2018-04-16 17:34 UTC

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