如何使用Git自动更新Perl模块的$ VERSION?

Nik*_*nko 23 versioning git perl

比方说,一个程序员团队正在Perl中使用Web应用程序git来管理他们的代码.现在,他们的模块版本化有一个小问题:

  • Perl::CriticPBP都建议$VERSION在代码中使用RCS支持的变量
  • git明确建议不要在代码使用可替换的修订版号(有充分的理由)

我理解为什么git不做关键字扩展.但是,我可以完全理解对一些代码的修订号的需要:

  • 确实需要为每个模块单独进行版本控制,因为您可能希望使用版本化版本 use
  • 您可能希望手动更改快速更改模块的版本号

用于打包和测试的全球产品版本可以使用标签轻松实现git describe,但我仍然没有看到为单个模块引入自动版本控制的方法.

你有什么解决方案吗?

bri*_*foy 20

忘掉Perl最佳实践所说的话.这不是圣经,它只是建议使用RCS关键词,因为在撰写本书时,没有人在考虑其他源控制系统.您的目标永远不应该遵守PBP的特定实施,而是要根据您自己的情况调整PBP中的想法.记得阅读那本书的第一章.

首先,让我们修复你的假设:

  1. 对于分发中的每个模块,您不需要单独的版本.您只需要为每个模块文件提供与以前的发行版不同的版本.发行版中的每个模块都可以具有相同的版本,当它们执行时,它们仍然可以大于上一个发行版的版本.

  2. 为什么不手动更改快速更改模块的版本?您应该已经定义了您的代码成为人们可以使用的东西的点.在这些方面,您可以说您已经决定是否应该分发您的工作产品,无论是作为测试版还是稳定版.您可以更改版本,以便告诉人们有关您的开发的信息.当你让源代码控制系统仅仅因为你提交时就这样做了,你就失去了在开发中表示周期的机会.例如,我通常使用两个小版本.这意味着我在整理结束之前得到100个版本,我需要碰撞主要版本以恢复正确的排序顺序.如果我让VCS为我处理这个问题,这个版本空间不够用.

我曾经使用RCS关键字将我的模块版本链接到他们的签入或修订号,但我从来没有真正喜欢过.在它准备成为下一个版本之前,我对一个文件做了很多提交,而且我不需要$VERSION仅仅因为我修复了文档错误而改变了.版本号会有很大的跳跃,因为我做了很多小改动.

现在,当我准备发布新的发行版时,我只需更改所有模块文件的版本.我使用ppi_version一次更改所有版本:

ppi_version change 1.23 1.24
Run Code Online (Sandbox Code Playgroud)

我的所有模块文件都是一样的$VERSION.我不需要$VERSION用来区分它们,因为我使用正常的源代码控制功能来做到这一点.我不需要$VERSION将它绑定到特定的提交.

如果我正在努力从版本1.23开始新的发行版,我开始制作开发版本1.23_01,1.23_02,依此类推,但只有当我准备好让人们尝试这些版本时.我在循环开始时更改版本,而不是结束.我下次发布的所有提交都已经有了他们的下一个版本.我还记下了我想要完成的循环.

当我认为这是一个新周期的开始时,我再次碰到了版本.当我认为我有稳定版本时,我将开发更改为稳定版本$VERSION,例如1.23_04到1.24.每当我发布一些东西时,我也会在源代码控制中标记它.我可以很容易地看到我的主要开发点与源代码控制的对应关系.

对我来说这一切都更容易.没有任何东西与我决定使用的源代码控制有关,所以如果我改变我使用的东西,我不必重做所有内容.