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