为什么我不能在SVN中检查bin和obj文件夹

时间:2011-08-01 09:03:08

标签: svn version-control

这似乎是一个非常基本的问题,但我很想知道答案。我正在使用Subversion(SVN)进行源代码管理,我一直在检查所有文件,但客户端要求我在SVN中创建一个规则,以避免检入binobj个文件夹。
为什么我不检查中的binobj文件夹?

客户端还要求我将解决方案文件保留在存储库文件夹之外。那是为什么?

3 个答案:

答案 0 :(得分:31)

您不应该向SVN添加任何临时文件,它们是临时的。整个obj目录由在构建过程中创建的文件组成,然后被丢弃。 (当然,它们会保留在磁盘上,因为有些文件会被重新使用,比如缓存,当源文件没有更改时,这是每次构建后都不会被删除的唯一原因。)

bin目录略有不同。可以将二进制文件添加到SVN,您可能已经为图标和图像文件执行了此操作。有些人也添加了构建的二进制文件,这是一个取决于您的配置管理过程的决定,没有“错误”的答案。但是,有时您的bin目录可能会填充您不想添加的其他文件。如果您正在构建.net应用程序,您将获得一大堆依赖dll复制到bin目录,这些dll并不是项目的严格组成部分。添加它们只会使您的存储库膨胀而无益。类似地,bin中有支持二进制文件,例如.pdb调试符号文件。这些也不是真的需要。

对于解决方案文件,我不确定问题,但是如果不检查它,那将是因为.sln文件只是一个或多个项目文件的“包装器”。建立一个视觉工作室项目并非严格需要,因为新项目将根据需要创建。我猜你的用户可能会创建自己的.sln文件,其中包含不同的项目组,每个用户都有不同的项目。这是防止签入的一个原因,因此每个用户都不会覆盖彼此的自定义文件(尽管用户有办法阻止修改存储在svn中的文件)。

因此,听起来您的配置策略不涉及向svn添加任何二进制文件。在这种情况下,它是一个非常好的想法,以防止这意外发生预提交钩子。我还建议将这些排除项添加到客户端全局忽略,以帮助您的用户首先尝试添加这些文件。

答案 1 :(得分:8)

“不应该”并不适用于所有人。但一般来说:

1)不要签入可以从代码生成的二进制文件。

2)SVN是源代码版本控制系统,并未考虑二进制文件。是的,SVN和其他VCS可以处理二进制文件,但这不是它们的预期目的,特别是在第1点之后)

3)由于这些是由您的源代码生成的,因此它们会发生很大变化,而不像很少更改的库。经常更改二进制文件会对VCS征税,因为任何VCS都无法正确处理二进制文件,并且随着对二进制文件的每次更改,您往往会存储更多内容,因为差异(delta)不如源代码那样高效。

来到解决方案(.sln)文件,最好将它们签入存储库,但并非绝对必要。但是大多数(如果不是全部).Net项目都是基于Visual Studio的,甚至出于构建目的,使用.sln文件可以使工作变得更加容易,因为您可以在sln文件而不是csproj(或其他项目)文件上调用msbuild。您可以获得其他优势,例如正确的依赖编译,并行编译等。

答案 2 :(得分:4)

您不应该真正签入任何用户特定文件或生成的输出文件,因为每次签入时您将重新编译重新编译的输出更改。我建议忽略bin,obj和.suo(而不是.sln)作为起点,因为这些将通过编译重新创建,然后忽略任何其他用户特定的或每次构建时重新生成的。