我们应该在仓库中存放什么文件

    项目中所有的东西都存放在仓库中。但是我们所说的东西确切地是指什么呢?

         很明显,你需要借助程序源文件来生成项目:JavaC#VB或任何其它用于编写应用程序的语言的源文件。实际上,一些人认为源代码是版本控制中很重要的部分,以至于把版本控制系统称为“源代码控制系统”。

         源代码确实重要;但是很多人错误地忽略了保存在版本控制中的其他东西。例如,假如你是一个Java程序员,会使用Ant工具来编译源代码。Ant使用一个通常叫做build.XML的脚本文件来控制它的行为。这个脚本也是生成过程的一部分,离开它就不能生成应用程序,因此它也应该被存放在版本控制系统中。

    类似地,很多项目使用元数据文件来保存配置。这些元数据文件也应该存放在仓库中。因此,所有用于创建发布CD的脚本、QA使用的测试数据,诸如此类都应该放到仓库中。

    实际上,当你需要去决定应该将哪些存放在仓库中,哪些不需要存放时,可以做一个简易的测试。只须问自己“如果没有最新版本的x,我们还能生成并且交付最新的应用程序吗?”如果回答是否定的,x就应该放在仓库中。


 

Joe问道……
如何对待生成的文件呢?

假如我们将生成项目所需要的所有文件都保存在仓库中,是否意味着我们也应该保存所有被生成的文件?例如,我们可以运行JavaDoc为源代码树生成API文档。这个文档应当存放在版本控制系统的仓库中吗?

一般来说,回答是否定的。如果一个被生成的文件能够从其他文件中再次生成,存放它就完全是重复的。这种重复为什么不好呢?并不是因为担心浪费磁盘空间,而是不希望这些文件变得不一致。假如我们保存了源文件和生成的文档,然后修改了源文件,那么原先生成的文档这时就会过期。如果我们忘记更新它并且提交,那么仓库中就会存在与源代码不一致的文档。因此,在这种情况下,我们希望为这种信息保持单一的来源,也就是源代码。这个规则适用于大部分生成的文件。

在实际工作中,一些文件生成起来比较困难。例如,假设存在一个被所有开发者用到的文件,而生成这个文件的工具只有一个许可证;或者需要花数小时才能创建的特殊文件。在这种情况下,把这类文件存放到仓库中才有意义。也就是说,如果只有拥有工具软件许可证的开发者才可以生成这些文件,或者只有使用某个高速计算机才能生成这些文件,那么这些文件就应该被提交,然后所有其他开发者才能够使用这些生成的文件来继续工作。

    像保存所有用于创建发布软件的文件一样,你也应该在版本控制下保存非源代码的项目文件任何将来你需要的文件),包括项目文档(内部的和外部的),也包括重要e-mail的文本、会议记录、在web上发现的信息——任何对项目有用的文件。