我应该将输出文件放在源代码管理中吗?

时间:2009-12-07 07:16:59

标签: version-control file-io

我被要求将我的项目中的每个文件都放在源代码管理下,包括数据库文件(不是架构,完整文件)。

这对我来说似乎不对,但我无法解释。我找到的关于源代码控制的每个资源都告诉我不要将生成的输出文件放在源代码控制系统中。我明白,这不是“源”文件。

但是,我得到了以下推理:

  • 谁在乎?我们有足够的带宽。
  • 我不介意每次获得最新版本时都要解决冲突,只需点击一下
  • 比考虑好的忽略文件要方便得多
    • 另外,如果我现在必须在bin文件夹中添加一个外部DLL文件,我不能忘记把它放在源代码管理中,因为bin文件夹现在没有被忽略。

最后一个要点的简单解决方案是将文件添加到库文件夹中,并从项目中引用它。

请解释是否以及为什么将生成的输出文件放在源代码管理下是错误的。

3 个答案:

答案 0 :(得分:3)

您尚未解释“数据库文件”是什么。

我肯定会在源代码控制中包含第三方库,因为它们必须用于构建,并且有一种方法可以在以后使用您在特定时刻使用的库版本来再现构建。但是,是的,这些库应该包含在“libraries”文件夹而不是输出目录中。

我通常不会包含从同一存储库中其他位置的源构建的自己的库 - 尽管我已经处于值得做的情况下,其中一些项目没有使用公共图书馆的“最新和最好”版本,只是偶尔更新。

在磁盘,处理器和网络被认为是免费且即时的世界中,我要反对包含所有内容的最重要的实用参数是,它更难说出对于任何给定的提交,确实已更改。从obj / bin目录中查看3个源文件列表比3个源文件和150个二进制文件更容易。

答案 1 :(得分:3)

生成的输出文件(通常)在VCS中是“危险的”,因为:

  • 你需要的版本是如何重新生成它们:你需要实际更新它们的那一天,你可能不记得怎么做了
  • 他们可以包含一些私有生成的文件,这些文件可以在提交者桌面上工作,但不能在客户端上工作(“在我的机器上工作” TM 综合症)
  • 某些生成的文件不容易存储在delta(特别是二进制文件)中,这使得它们占用了大量空间(并且有一天会清理该空间的主题......)

外部库不是由您的项目直接生成的,并且可以放在VCS中,尽管像公共Maven仓库这样的外部存储库在这种管理方面更好。

答案 2 :(得分:1)

我们是否还从源代码中编译了类文件,可执行文件,DLL等编译对象文件?当我们进行严格的批量测试并且数据库的大小变成几千兆字节或太字节时呢?

线索的名称是:它是来源代码管理系统。

我可以理解put eveything的简单性,开发人员更有可能不会忘记一些重要的文件。但是,如果你正在进行常规的自动化构建,那么无论如何肯定会被提升?

我认为关键词是:

  

这比方便得多   不得不考虑好的忽视   文件

你明确禁止拥有好的忽略文件吗?我的猜测是你已经排除了.exe和.class(或其他)文件。假设您确实排除了数据库的麻烦,那会有问题吗?为什么?这是一个有意识的行动,你正在为普通的好事挑选。在Eclipse中,将新文件类型添加到工作空间的CVS忽略所有项目的规则需要几秒钟。

“不忽视文件”的规则几乎是不言而喻的荒谬。一旦你获得了自由,就有一些忽略文件然后为什么不只是智能地使用它们来排除数据库呢?谁不方便?只有你自己,如果有的话,你准备做额外的工作。