我们应该在仓库中存放什么文件
项目中所有的东西都存放在仓库中。但是我们所说的东西确切地是指什么呢?
很明显,你需要借助程序源文件来生成项目:Java、C#、VB或任何其它用于编写应用程序的语言的源文件。实际上,一些人认为源代码是版本控制中很重要的部分,以至于把版本控制系统称为“源代码控制系统”。
源代码确实重要;但是很多人错误地忽略了保存在版本控制中的其他东西。例如,假如你是一个Java程序员,会使用Ant工具来编译源代码。Ant使用一个通常叫做build.XML的脚本文件来控制它的行为。这个脚本也是生成过程的一部分,离开它就不能生成应用程序,因此它也应该被存放在版本控制系统中。
类似地,很多项目使用元数据文件来保存配置。这些元数据文件也应该存放在仓库中。因此,所有用于创建发布CD的脚本、QA使用的测试数据,诸如此类都应该放到仓库中。
实际上,当你需要去决定应该将哪些存放在仓库中,哪些不需要存放时,可以做一个简易的测试。只须问自己“如果没有最新版本的x,我们还能生成并且交付最新的应用程序吗?”如果回答是否定的,x就应该放在仓库中。
Joe问道…… 假如我们将生成项目所需要的所有文件都保存在仓库中,是否意味着我们也应该保存所有被生成的文件?例如,我们可以运行JavaDoc为源代码树生成API文档。这个文档应当存放在版本控制系统的仓库中吗? 一般来说,回答是否定的。如果一个被生成的文件能够从其他文件中再次生成,存放它就完全是重复的。这种重复为什么不好呢?并不是因为担心浪费磁盘空间,而是不希望这些文件变得不一致。假如我们保存了源文件和生成的文档,然后修改了源文件,那么原先生成的文档这时就会过期。如果我们忘记更新它并且提交,那么仓库中就会存在与源代码不一致的文档。因此,在这种情况下,我们希望为这种信息保持单一的来源,也就是源代码。这个规则适用于大部分生成的文件。 在实际工作中,一些文件生成起来比较困难。例如,假设存在一个被所有开发者用到的文件,而生成这个文件的工具只有一个许可证;或者需要花数小时才能创建的特殊文件。在这种情况下,把这类文件存放到仓库中才有意义。也就是说,如果只有拥有工具软件许可证的开发者才可以生成这些文件,或者只有使用某个高速计算机才能生成这些文件,那么这些文件就应该被提交,然后所有其他开发者才能够使用这些生成的文件来继续工作。 |
像保存所有用于创建发布软件的文件一样,你也应该在版本控制下保存非源代码的项目文件(任何将来你需要的文件),包括项目文档(内部的和外部的),也包括重要e-mail的文本、会议记录、在web上发现的信息——任何对项目有用的文件。