我是autotools的新手,正在开发一个C项目,希望将其添加到git存储库中。我需要在版本控制系统中跟踪哪些由autotools生成的文件,哪些应该被忽略?
我是autotools的新手,正在开发一个C项目,希望将其添加到git存储库中。我需要在版本控制系统中跟踪哪些由autotools生成的文件,哪些应该被忽略?
不应该在版本控制下保留任何未经手动编辑的文件。这意味着版本控制系统应忽略任何生成的文件。基本上只有以下文件才会被纳入版本控制:
configure.ac
Makefile.am
AUTHORS
、NEWS
等Makefile.am
为了解决Scharron提出的"准备好安装"版本的问题,有些人在项目的根目录中包含一个脚本,称为bootstrap
或autogen.sh
,当你检出一个新副本时运行一次。你可以在我的一个项目这里看到一个示例。对于一个更简单的项目,你的autogen.sh
实际上只需要包含一行:
autoreconf --install || exit 1
虽然一些人喜欢在autogen.sh
的结尾自动运行./configure
,但更好的方式是手动运行它。
为什么不把所有生成的文件都跟踪到版本控制中呢?因为这些文件的内容取决于你所构建的机器、你生成它们时用的autotools版本以及月亮的相位。任何这些变化发生时,生成的autotools文件都会改变,而你会在提交中得到很多垃圾信息。
此外,任何从版本控制中检出代码以构建它的人都应该安装适当的开发工具,所以你真的不需要担心由于缺少autotools而导致的问题。
VonC所说的关于使用configure
文件生成Makefile
的C项目对于源代码发行版(当你输入make dist
时得到的.tar.gz
文件)是正确的,但并不一定适用于从版本控制中新检出的副本。
注意:我同意ptomato的回答,并将这个答案留作社区Wiki。
尽管对于源代码分发来说是有意义的,但你的项目可能不是这样的情况。
对于开发目的,ptomato的回答更加合理。
通常所有的C项目都会带有一个configure文件,可以生成用于编译的实际Makefile文件。
因此,在考虑使用autotool链时,我建议对生成的所有文件进行版本控制,直到配置文件为止,因为它们通常只需要一次生成操作即可。
这意味着任何拥有你版本项目的检出副本的人都可以立即开始:
./configure
make
make install
所以,尽管通常情况下你不应该对任何生成的文件进行版本控制,但是如果那个项目的其他读者可以从中受益,则可以存储这些文件,特别是: