我应该在版本控制库中保存哪些由Autotools生成的文件?

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

您不应该将任何文件保留在未经手动编辑的版本控制之下。 这意味着任何生成的文件都应该被版本控制系统忽略。 我基本上把下面的版本控制:

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

为了解决由Scharron提供的“随时可以安装”的版本,有些人在项目的根目录中包含一个名为bootstrapautogen.sh的脚本,当您检查新的副本时,该脚本会运行一次。 你可以在我的一个项目中看到一个例子。 对于一个更简单的项目,你的autogen.sh实际上只需要包含一行:

 autoreconf --install || exit 1 

尽pipe有些人更喜欢在autogen.sh的末尾自动运行./configure

为什么不跟踪版本控制中的所有生成的文件? 因为它们的内容取决于你正在build造的机器,你生成的自动工具的版本以及月亮的相位。 任何时候,任何这些变化,生成的自动工具文件将会改变,你会在你的提交中得到很多垃圾。

而且,任何为了构build而从版本控制中检查代码的人都应该安装合适的开发工具,所以你不必担心由于缺less自动工具而惹麻烦。

VonC所说的关于C程序生成Makefile文件的C项目对于源代码分发 (您inputmake dist时得到的.tar.gz文件)是正确的,但不一定是从版本控制中刚刚检出的副本。

注意:我同意ptomato的答案 ,并将此答案留作社区Wiki。
这对源代码分发是有意义的,但是你的项目可能不是一个。
为了发展目的,ptomato的答案更有意义。


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

所以当你考虑autotool链时,我会build议版本控制所有生成到configuration文件的文件,因为它们通常是一次性的生成操作。

http://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Autoconf.svg/309px-Autoconf.svg.png

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

 ./configure make make install 

所以,虽然一般情况下是这样的,但不应该对任何生成的文件进行版本化,如果其他读者能够:

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

一般来说,你不应该把任何生成的文件保存在一个仓库中(否则你会看到变化,必须提交/还原)。 但是,如果您想将“准备安装”版本添加(=标记)到您的存储库,我会build议保留configure和Makefile文件。 他们是一个安装所需的,应该没有autotools工作。