【问题标题】:Which files generated by Autotools should I keep in version control repository?我应该将 Autotools 生成的哪些文件保存在版本控制存储库中?
【发布时间】:2011-03-18 11:33:59
【问题描述】:

我是 autotools 的新手,我正在做一个 C 项目。我想将我的项目添加到 git 存储库。我需要在我的版本控制系统中跟踪哪些由自动工具生成的文件,哪些应该被忽略?

【问题讨论】:

    标签: git version-control autotools


    【解决方案1】:

    您不应将任何未经手工编辑的文件置于版本控制之下。这意味着版本控制系统应该忽略任何生成的文件。我基本上将以下内容置于版本控制之下:

    • configure.ac
    • Makefile.am
    • AUTHORSNEWS等文档文件
    • Makefile.am 在子目录中

    为了解决 Scharron 提出的“准备安装”版本的问题,有些人在项目的根目录中包含一个名为 bootstrapautogen.sh 的脚本,您在检查时运行一次一个新鲜的副本出来。您可以在我的一个项目here 中看到一个示例。对于一个更简单的项目,您的 autogen.sh 实际上只需要包含一行:

    autoreconf --install || exit 1
    

    虽然有些人喜欢在autogen.sh 的末尾自动运行./configure

    为什么不在版本控制中跟踪所有生成的文件?因为它们的内容取决于您正在构建的机器、您生成它们的自动工具的版本以及月相。任何时候这些更改,生成的 autotools 文件都会更改,并且您的提交中会出现很多垃圾。

    此外,任何将您的代码检查出版本控制以进行构建的人都应该安装适当的开发工具,因此您真的不必担心人们会因为缺少自动工具而遇到麻烦。

    VonC 关于 C 项目附带 configure 文件以生成 Makefiles 的说法对于源代码分发是正确的(您在键入 @987654336 时获得的 .tar.gz 文件@) 但不一定适用于版本控制中新签出的副本。

    【讨论】:

    • 如果您在 m4 目录中添加任何自定义宏,当然也必须添加这些宏。
    【解决方案2】:

    注意:我同意 ptomato'ss answer,并将此答案保留为社区 Wiki。
    这对源代码分发有意义,但您的项目可能不是一个。
    出于开发目的,ptomato 的回答更有意义。


    所有 C 项目通常都带有一个配置文件,能够生成用于编译的实际 Makefile。

    因此,当您考虑自动工具链时,我建议将所有生成的文件版本化到配置文件,因为它们通常是一次性生成操作。

    这意味着任何拥有您版本项目的签出副本的人都可以立即开始:

    ./configure
    make
    make install
    

    因此,虽然您通常不应该对任何生成的文件进行版本控制,但您可以存储这些文件,尤其是如果该项目的其他阅读器可以:

    • 受益于不重新生成这些文件(以获得相同的结果)
    • 立即开始配置和编译。

    【讨论】:

    • 我认为您对源代码分发是什么感到困惑——每个项目都有一个,但它与版本控制中保存的不同。源代码分发应包含用户构建项目所需的文件;版本控制应包含开发人员构建项目所需的文件。
    • @ptomato:我同意。问题是,这些天我一直在重新编译源代码分发项目(但我不开发它们)。因此,我对 VCS 中可能存在的内容的“歪曲”​​愿景。
    【解决方案3】:

    通常,您不应将任何生成的文件保留在存储库中(否则您会看到更改并必须提交/恢复它们)。 但是,如果您想将“准备安装”版本添加(= 标记)到您的存储库,我建议保留配置和 Makefile 文件。它们是安装所需的,无需自动工具即可工作。

    【讨论】:

    • 您绝对不能将 Makefile 放入存储库中。关于是否在 repo 中包含 Makefile.in 存在一些争论(它们不应该,因为“准备构建”版本只需要作为 tarball 存在)但是将 Makefiles 放在 repo 中是绝对错误的。配置脚本的重点是构建特定于特定机器的 Makefile(等),并且 Makefile 可能会因平台而异。配置生成的任何内容都不能在 repo 中
    猜你喜欢
    • 2015-10-31
    • 2011-03-12
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多