9

我很想知道您如何处理新版本问题的版本号冲突。

您如何处理相关文件(如手册页等)中的版本号。

该软件是使用 gnu 工具链构建的,因此 autoconf、automake 等可用并用于应用程序的版本号。这样信息就可以被重用。

git用作vcs。

一种可能性是在 Makefile.am 中引入一个额外的新目标,该目标执行 sed/awk 以替换所有关联文件中的版本号和日期。该目标可以在新版本开发的开始(分支之后)调用一次。

然后,当人们对项目进行git clone或发布 tarball 完成时,项目可以使用正确的信息构建。当然,在开始开发新版本时必须记住运行这个 make 目标。

另一种选择是用 dist 目标的钩子替换 sed/awk。但这会使项目的 git 存储库处于没有正确版本号与关联文件关联的状态。

我更喜欢第一个解决方案,因为它还在 git 历史记录中记录了正确的版本号。

在进行 sed/awk 替换时,您更喜欢“在文件中”还是在文件中使用模板,就像 autoconf/automake 工具一样。我看到这两种方法的优点和缺点。

您如何处理关联文件的版本控制。您是在开发阶段开始时更改它们吗?是在发货前更改它们吗?您是进行 infile 替换还是更喜欢使用模板?

谢谢。

4

3 回答 3

10

现在常见的解决方案是使用 m4_esyscmd 参数调用 AC_INIT 以从 git 生成 VERSION。例如,autoconf 的 configure.ac 包含以下行:

AC_INIT([GNU Autoconf],
        m4_esyscmd([build-aux/git-version-gen .tarball-version]),
        [bug-autoconf@gnu.org])

其中 build-aux/git-version-gen 是一个简单的脚本,它调用“git describe”来生成版本号。(见 gnulib)

这种方法有缺点,但它可能是有效的。

于 2009-07-18T20:50:03.540 回答
6

我认为执行此操作的标准方法是使用 Git 的钩子系统和 m4 或 sed/awk 按照您的建议进行搜索/替换。您只需要在每个文件的注释中添加一个特殊标记(可能在标题中)。

这是关于githooks的参考,这里有几页由解决相同问题的人写的:

这两者都依赖于将版本号存储在源代码树中某处的文件中。

我还遇到了一个名为0release的项目,它声称可以自动创建发布(并设置版本号)。

最后,关于版本号,这在其他几个问题中得到解决:

于 2009-06-12T13:08:04.490 回答
1

我们使用经典的major.minor.patch 系统,它作为“标签”应用于发布候选版本,我们有一个脚本将提交标记为版本号,而不是使用git“标签对象”。所有版本编号都是“手工”完成的。它工作得相当好,因为版本号是由“发布到登台”脚本创建的,这在开发过程中要晚得多。我们不费心使用任何 git 钩子,因为我们真的不需要,如果提交没有离开开发环境,那么除了它的内部 SHA 代码之外它不需要 id。

我们试图强制每个“补丁”版本必须与具有相同主要、次要标签的其他版本二进制兼容。

这样,任何带有标签的东西至少应该构建,但它有可能或很可能不适用于规范。

一个改进是让 QA 部门在任何“QA 批准”的东西上创建一个签名的标签对象,但现在我们依赖其他文书工作。

于 2009-06-12T13:11:36.727 回答