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

VJA*_*JAI 18 svn version-control

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

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

gbj*_*anb 31

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

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

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

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

  • @gbjbaand很棒的答案!特别是我认为你所说的.sln文件是我的客户端不希望我ckeck-in .sln文件的正确原因. (2认同)

man*_*lds 8

"不应该"并不适用于所有人.但一般来说:

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

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

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

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


Chr*_*den 7

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