如何对 erlang 项目进行版本控制?
How to version an erlang project?
有什么方法可以 version/tag 一个 erlang 项目吗?
到目前为止,我一直在使用 git 标签来说明我的版本发布,并在我的应用程序配置中使用自定义字段(例如 {version, "0.0.1-alpha"}
)。但是有没有更好的方法来实现这一点?
我用的是rebar,我查了一下,没找到这样的功能。我知道钢筋与 git 标签完美搭配,但我还想在我的项目文件随附的配置中说明 version/release。
在扩展中,我想在我的申请中包含 "package-config"。
干杯。
版本在 Erlang 中存在于多个级别:
Erlang 模块可以使用 -vsn
属性进行版本控制。例如,mymodule.erl
文件的顶部可能如下所示:
-module(mymodule).
-vsn(1.0).
...
如果您不指定 -vsn
,Erlang 编译器会使用模块文件内容的 MD5 校验和为您生成一个。
Erlang 应用程序在其 .app
文件中进行了版本控制。例如,对于名为 myapp
的应用程序,其 myapp.app
的顶部可能如下所示:
{application,myapp,
[{description,"My Favorite Application"},
{vsn, "1.2.3"},
...
Erlang 版本也可以进行版本控制,但是如何操作取决于您使用什么工具来生成版本。以 reltool
和 rebar
为例,您可以在 reltool.config
文件中指定发布版本。例如,对于名为 myrel
的版本,其 reltool.config
的顶部可能如下所示:
{sys, [
{lib_dirs, []},
{erts, [{mod_cond, derived}, {app_file, strip}]},
{app_file, strip},
{rel, "myrel", "1.9",
...
{rel, "myrel", "1.9"
行中显示的“1.9”是发布版本号。
或者,使用 systools
,一个 .script
文件,可用于生成一个 .boot
文件以指定如何加载和启动 Erlang 系统,包含元组 {script, {ReleaseName, ReleaseVsn}, Actions}
其中 ReleaseVsn
指定发行版本。例如,myrel.script
的顶部可能如下所示:
{script,
{"myrel","1.9"},
[{preLoaded,
[erl_prim_loader,erlang,erts_internal,init,otp_ring0,prim_eval,
prim_file,prim_inet,prim_zip,zlib]},
{progress,preloaded},
...
您可以自己编写这样一个文件,或者更明智地从 release resource file 生成一个带有 systools:make_script
的文件,它通常有一个 .rel
后缀,其顶部指定一个版本版本如下图:
{release, {RelName,Vsn}, {erts, EVsn},
...
其中 Vsn
是发布版本,EVsn
是发布应该使用的 Erlang 运行时系统 (erts) 的版本。
随 relx
, release versions are specified much as they are for .rel
files. See the relx documentation 了解详情。
因此,Erlang 项目由许多版本化的实体组成,其中一些可能在您的控制之下,但其他一些您可能通过其他 libraries/applications 的依赖项继承,包括来自 Erlang 标准库的那些。
有什么方法可以 version/tag 一个 erlang 项目吗?
到目前为止,我一直在使用 git 标签来说明我的版本发布,并在我的应用程序配置中使用自定义字段(例如 {version, "0.0.1-alpha"}
)。但是有没有更好的方法来实现这一点?
我用的是rebar,我查了一下,没找到这样的功能。我知道钢筋与 git 标签完美搭配,但我还想在我的项目文件随附的配置中说明 version/release。
在扩展中,我想在我的申请中包含 "package-config"。
干杯。
版本在 Erlang 中存在于多个级别:
Erlang 模块可以使用
-vsn
属性进行版本控制。例如,mymodule.erl
文件的顶部可能如下所示:-module(mymodule). -vsn(1.0). ...
如果您不指定
-vsn
,Erlang 编译器会使用模块文件内容的 MD5 校验和为您生成一个。Erlang 应用程序在其
.app
文件中进行了版本控制。例如,对于名为myapp
的应用程序,其myapp.app
的顶部可能如下所示:{application,myapp, [{description,"My Favorite Application"}, {vsn, "1.2.3"}, ...
Erlang 版本也可以进行版本控制,但是如何操作取决于您使用什么工具来生成版本。以
reltool
和rebar
为例,您可以在reltool.config
文件中指定发布版本。例如,对于名为myrel
的版本,其reltool.config
的顶部可能如下所示:{sys, [ {lib_dirs, []}, {erts, [{mod_cond, derived}, {app_file, strip}]}, {app_file, strip}, {rel, "myrel", "1.9", ...
{rel, "myrel", "1.9"
行中显示的“1.9”是发布版本号。或者,使用
systools
,一个.script
文件,可用于生成一个.boot
文件以指定如何加载和启动 Erlang 系统,包含元组{script, {ReleaseName, ReleaseVsn}, Actions}
其中ReleaseVsn
指定发行版本。例如,myrel.script
的顶部可能如下所示:{script, {"myrel","1.9"}, [{preLoaded, [erl_prim_loader,erlang,erts_internal,init,otp_ring0,prim_eval, prim_file,prim_inet,prim_zip,zlib]}, {progress,preloaded}, ...
您可以自己编写这样一个文件,或者更明智地从 release resource file 生成一个带有
systools:make_script
的文件,它通常有一个.rel
后缀,其顶部指定一个版本版本如下图:{release, {RelName,Vsn}, {erts, EVsn}, ...
其中
Vsn
是发布版本,EVsn
是发布应该使用的 Erlang 运行时系统 (erts) 的版本。随
relx
, release versions are specified much as they are for.rel
files. See the relx documentation 了解详情。
因此,Erlang 项目由许多版本化的实体组成,其中一些可能在您的控制之下,但其他一些您可能通过其他 libraries/applications 的依赖项继承,包括来自 Erlang 标准库的那些。