版本和约束
Composer 版本和 VCS 版本
Composer 很大程度上依赖于像 Git 这样的版本控制系统,所以说『版本』可能有点含糊不清。在版本控制系统的意义上,『版本』是包含特定数据的特定文件集。在 Git 术语中,它可以是 ref 或者某个特定提交,可以由分支 HEAD 或 tag 表示。当您在 VCS 中签出该版本时 - 例如,标记 v1.1 或提交 e35fa0d 等等 ,您需要一组已知的文件,并且您总是会获得相同的文件。
在 Composer 中对版本的定义是 —— 当我们引入一个包的时候,在 require 后面的字符串(例如 ~1.1 或 1.2.*)实际上是对这个包的版本约束。 Composer 使用版本约束来确定应该从 VCS 中检出的文件集(或者只是验证在 composer.json 中具有 version 规范的 Statically-Maintained 库是否可以使用)。
VCS 标签 和 分支
以下的讨论中,我们假设使用如下列出的 library 仓库:
~/my-library$ git branch
v1
v2
my-feature
nother-feature
~/my-library$ git tag
v1.0
v1.0.1
v1.0.2
v1.1-BETA
v1.1-RC1
v1.1-RC2
v1.1
v1.1.1
v2.0-BETA
v2.0-RC1
v2.0
v2.0.1
v2.0.2
标签
通常情况, Composer 使用标签来处理版本控制 (标签不同与分支 -- 如果不明白什么是分支,请阅读 version control systems).
当你写版本限制条件时,Composer 所引用的是一个确切的标签 (例如, 1.1) 或者一个合法的标签范围 (例如, >=1.1 <2.0, 或者 ~4.0)。 当 Composer 解析这些版本限制时, 它首先向 VCS 索取所有可用的标签的列表, 然后基于这个列表创建一个可用版本号的内部列表。如上边的例子, Composer 的内部列表包含了版本 1.0ÿ