我应该在版本控制库中保存哪些由Autotools生成的文件?
我是新来的自动工具,我正在一个C项目。 我想将我的项目添加到git存储库。 我需要在我的版本控制系统中跟踪自动工具生成哪些文件,哪些应该被忽略?
您不应该将任何文件保留在未经手动编辑的版本控制之下。 这意味着任何生成的文件都应该被版本控制系统忽略。 我基本上只把下面的版本控制:
configure.ac
-
Makefile.am
- 文档文件,如
AUTHORS
,NEWS
等。 -
Makefile.am
在子目录中
为了解决由Scharron提供的“随时可以安装”的版本,有些人在项目的根目录中包含一个名为bootstrap
或autogen.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文件的文件,因为它们通常是一次性的生成操作。
这意味着任何有你的版本项目签出的副本可以立即开始:
./configure make make install
所以,虽然一般情况下是这样的,但不应该对任何生成的文件进行版本化,如果其他读者能够:
- 受益于不重新生成这些文件(对于相同的结果)
- 立即开始configuration和编译。
一般来说,你不应该把任何生成的文件保存在一个仓库中(否则你会看到变化,必须提交/还原)。 但是,如果您想将“准备安装”版本添加(=标记)到您的存储库,我会build议保留configure和Makefile文件。 他们是一个安装所需的,应该没有autotools工作。