Abh*_*yay 50 git version-control autotools
我是autotools的新手,我正在研究一个C项目.我想将我的项目添加到git存储库.我需要在我的版本控制系统中跟踪哪些文件由autotools生成,哪些文件应该被忽略?
pto*_*ato 66
您不应将任何未经手动编辑的文件保留在版本控制之下.这意味着版本控制系统应该忽略任何生成的文件.我基本上只在版本控制下放置以下内容:
configure.ac Makefile.am AUTHORS,NEWS等Makefile.am 在子目录中为了解决Scharron提出的"准备安装"版本的问题,有些人在项目的根目录中包含一个脚本,称为bootstrap或者autogen.sh,当您检查新副本时运行一次.你可以看到在我的项目的一个例子在这里.对于一个更简单的项目,您autogen.sh实际上只需要包含一行:
autoreconf --install || exit 1
Run Code Online (Sandbox Code Playgroud)
虽然有些人喜欢./configure在结束时自动运行autogen.sh.
为什么不在版本控制中跟踪所有生成的文件?因为它们的内容取决于您正在构建的机器,您生成它们的自动工具的版本以及月亮的相位.任何这些更改,生成的autotools文件都会改变,你的提交中会收到很多垃圾.
此外,任何为了构建代码而从版本控制中检查代码的人都应该安装适当的开发工具,因此您实际上不必担心由于缺少自动工具而遇到麻烦.
VonC所说的关于带有configure文件生成Makefiles的C项目的内容对于源代码分发(.tar.gz您键入时获得的文件)是正确的,make dist但不一定是版本控制中新签出的副本.
Von*_*onC 12
注意:我同意ptomato的答案,并将此答案留作社区Wiki.
它对源代码分发很有意义,但您的项目可能不是一个.
出于开发目的,ptomato的答案更有意义.
所有C项目通常都带有一个配置文件,能够生成用于编译的实际Makefile.
因此,当您考虑自动工具链时,我建议将生成的所有文件版本化到配置文件,因为它们通常是一次性生成操作.

这意味着任何拥有签出的版本项目副本的人都可以立即开始:
./configure
make
make install
Run Code Online (Sandbox Code Playgroud)
因此,虽然通常你不应该对任何生成的文件进行版本化,但是你可以存储这些文件,特别是如果来自该项目的其他阅读器可以: