去模块已经为去开发带来了秩序,但也存在一些潜在的混乱。管理模块尤其是伪版本可能很困难,尤其是在要进行一些最新更改的情况下。
JFrog GoCenter是一个免费的版本话棋模块仓库,现在它包含了一些重要的更新,可以帮助你坚持这个最佳实践。首先让我们看看伪版本是如何工作的,以及您可以期望从这些更改中得到什么。我们还提供了一些指导,让您在升级到1.13或更高版本时保持去的构建工作。
去的模块版本化
对走模块进行版本化是一个关键特性,它为开发人员提供了一种方法来确保他们的应用程序使用他们想要的依赖项。在对模块进行版本控制时,应用程序可以指定依赖的模块版本,因为我们知道模块版本与其他组件运行时兼容问题。
去模块版本是通过在底层源存储库中标记其修订来分配的.go命令使用标准形式vX.Y.Z的语义版本控制,以此来描述模块的版本。版本号根据API的变化而变化,如下图:
从这个标准格式中,可以比较模块版本,以确定哪个应该被认为是最当前的,哪个应该被认为是最不当前的。
使用Pseudo-Versions(伪版本)
版本化的走模块是已经发布的,供一般使用的模块,应该是大多数开发人员的首选。但是,在某些情况下,您不能发布模块的最新版本。
例如,一个团队可能需要在开发期间共享一个临时版本。特别是当一个依赖的项目还没有发布版本时,所以它还没有被标记上版本。类似地,您可能需要针对尚未标记(打标签)的提交进行开发。
要使用未标记版本的模块作为依赖项,必须通过其伪版本标识符引用它。伪版本的格式如下:
伪版本有三种可接受的形式:
·Vx.0.0-yyyymmddhhmms-abcdefxyz,当在目标提交之前没有使用适当的主版本进行早期版本提交时
·vX.Y.Z-pre.0。yyyymmddhhmms -abcdefxyz。当目标提交之前的最新版本提交是vX.Y.Z-pre时,
·vX.Y。(Z + 1) 0。yyyymmddhhmms -abcdefxyz。当目标提交之前的最新版本提交是vX.Y.Z时,
作为一种最佳实践,伪版本字符串不应该是手工输入的.go命令将接受普通的提交散列并自动将其转换为伪版本。此方法有助于根据生成的时间戳比较修订。
例如,一个去命令可能只使用模块查询的提交散列(githash):
同时,这里存在无法让去命令自动生成伪版本存在问题:
·伪版本参与最小版本选择。如果它的版本前缀不准确,那么伪版本的优先级可能比随后的版本更高,从而有效地将模块固定到提交
·伪版本中的提交日期提供了伪版本之间的总顺序,因此如果它被编辑,就会打乱顺序
尽管有这样的建议,但有时我们会手工修改的走模块中可能存在一个伪版本。在其他情况下,完整的伪版本字符串可能由第三方工具生成。
更严格的规则去1.13
去的发行1.12版,去对伪版本引用进行了修改。大多数涉及伪版本的操作都接受版本字符串和日期的任意组合,并且只要该修订存在,就会解析为基础修订(通常是Git提交散列,Git哈希)。
1.13然而去的发布带来了更严格的规则,以解决上面提到的问题.Go 1.13对“走”命令接受的伪版本进行了限制,使一些以前接受但不规范的版本无效。
现在,客户端将针对版本控制元数据对伪版本的不同元素执行一些验证:
·版本前缀的格式必须为vX.0.0,或者从命名修订版本的祖先上的标签派生,或者从包含命名修订版本本身上的构建元数据的标签派生。
·日期字符串必须与修订版的UTC时间戳匹配。
·修订的简称必须使用与去命令生成的字符相同的字符数。(对于git使用的sha - 1散列,为12位数字的前缀)。