我是autotools的新手,我正在开发一个C项目。我想将我的项目添加到git存储库。我需要在我的版本控制系统中跟踪哪些文件由autotools生成,哪些文件应该被忽略?
答案 0 :(得分:66)
您不应将任何未经手动编辑的文件保留在版本控制之下。这意味着版本控制系统应该忽略任何生成的文件。我基本上只在版本控制下 以下:
configure.ac
Makefile.am
AUTHORS
,NEWS
等。Makefile.am
为了解决Scharron提出的“准备安装”版本的问题,有些人在项目的根目录中包含了一个名为bootstrap
或autogen.sh
的脚本。一旦你检查出新的副本。您可以在我的一个项目here中查看示例。对于更简单的项目,您的autogen.sh
实际上只需要包含一行:
autoreconf --install || exit 1
虽然有些人更喜欢在./configure
结束时自动运行autogen.sh
。
为什么不在版本控制中跟踪所有生成的文件?因为它们的内容取决于您正在构建的机器,您生成它们的自动工具的版本以及月亮的相位。任何这些更改,生成的autotools文件都会改变,你的提交中会收到很多垃圾。
此外,任何为了构建代码而从版本控制中检查代码的人都应该安装适当的开发工具,所以你真的不必担心因为缺少自动工具而遇到麻烦。
对于源代码分发(您的configure
文件,VonC所说的关于带有Makefile
文件以生成.tar.gz
的C项目的内容是正确的键入make dist
时获取,但不一定是版本控制中新签出的副本。
答案 1 :(得分:12)
注意:我同意ptomato's answer,并将此答案保留为社区Wiki。
它对源代码分发很有意义,但您的项目可能不是一个
出于开发目的,ptomato的答案更有意义。
所有C项目通常都附带一个配置文件,能够生成用于编译的实际Makefile。
因此,当您考虑自动工具链时,我建议将生成的所有文件版本化到配置文件,因为它们通常是一次性生成操作。
这意味着任何拥有签出的版本项目副本的人都可以立即开始:
./configure
make
make install
所以,虽然通常你不应该对任何生成的文件进行版本化,但是你可以存储这些文件,特别是如果来自该项目的其他阅读器可以:
答案 2 :(得分:-2)
通常,您不应将任何生成的文件保留在存储库中(否则您将看到更改并且必须提交它们/还原它们)。 但是,如果您希望将“准备安装”版本添加(=标记)到您的存储库,我建议保留configure和Makefile文件。它们是安装所需的,无需autotools即可运行。