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

20

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

客户还要求我将解决方案文件放在存储库文件夹之外。为什么呢?

3个回答

32

不应将任何临时文件添加到SVN,它们是临时的。整个obj目录由在构建过程中创建并随后丢弃的文件组成。(当源文件不改变时,它们像缓存一样被重复使用而保留在磁盘上,但这是它们每次构建后未删除的唯一原因)。

bin目录有些不同。向SVN添加二进制文件是可以的,你可能已经为图标和图像文件这样做了。有些人也会添加构建的二进制文件,这是取决于你的配置管理过程的决定,没有“错误”的答案。然而,有时bin目录可能会填满其他你不想添加的文件。如果你正在构建.net应用程序,你会得到许多依赖dll复制到bin目录中,它们并不严格属于你的项目。添加这些文件只会让你的仓库变得臃肿,没有任何好处。同样,在bin目录中有支持二进制文件,如.pdb调试符号文件。这些实际上也不是必需的。

至于解决方案文件,如果问题不是要加入svn检查,则是因为.sln文件只是一个或多个项目文件的“包装器”。构建Visual Studio项目时它并不是严格必需的,需要时会自动创建一个新的文件。我猜你的用户可能会创建自己的.sln文件,并在其中分组了不同的项目,使每个文件不同于每个用户。这将是防止检入的原因之一,这样每个用户就不会覆盖彼此的自定义文件(虽然有办法让用户防止修改存储在svn中的文件)。

因此,看起来您的配置策略不涉及向svn添加任何二进制文件。如果是这样,那么使用预提交钩子防止意外添加这些文件是一个非常好的主意。我还建议将这些排除项添加到客户端全局忽略列表中,以帮助您的用户从一开始就不要尝试添加这些文件。


+1 我同意你的回答,它扩展了我在下面回答中提到的观点。 - Chris Snowden
2
@gbjbaand 很棒的回答!特别是我认为您所说的.sln文件是我客户不希望我检入该文件的正确原因。 - VJAI
顺便提一下,如果您添加了一个sln文件并且不希望提交本地更改,可以在其上设置一个“忽略提交”变更列表。 - gbjbaanb
Bin是一个输出文件夹。将输入和输出混合在一起是一个不好的主意。 - undefined

10
"应该不"并不适用于每个人,但一般来说:
1)不要检入可以从代码生成的二进制文件。
2)SVN是一个源代码版本控制系统,而不是为二进制文件设计的。是的,SVN和其他版本控制系统可以处理二进制文件,但这不是它们的预期目的,尤其是在第1点之后。
3)由于这些文件是由您的源代码生成的,因此它们会经常发生变化,并且与很少发生变化的库不同。频繁变化的二进制文件会给版本控制系统带来负担,任何版本控制系统都无法正确处理二进制文件,并且随着二进制文件的每次更改,您 tend to store more as the diffing(delta)与源代码不那么高效。
至于解决方案(.sln)文件,将它们检入存储库是理想的,但不绝对必要。但是,大多数(如果不是全部).Net项目都是基于Visual Studio的,即使对于构建目的,拥有.sln文件也会使工作变得更加容易,因为您可以在sln文件上调用msbuild,而不是csproj(或其他项目)文件。您还可以获得其他优点,例如适当的依赖项编译,并行编译等。

我猜“没有二进制文件”不是一个好答案。毕竟它适用于图像,而且它们被认为是源代码。我自己检入构建工件,这使得实施人员的生活更加轻松,而在svn中的二进制增量实际上非常好,可能比你想象的要好得多。 - gbjbaanb
@gjbjaanb,我在回答中哪里说了不允许使用二进制文件?我的回答开头是“‘不应该’并不适用于所有人”,然后在同一行中使用了“通常”这个词,接着说“是的,SVN和其他版本控制系统可以处理二进制文件,但这不是它们的本意”。我哪里说了不允许使用呢?我不知道你是否给我点了踩,只是这么说而已。 - manojlds
冷静点,我在加上我的答案并对为什么会有人点踩提出了我的想法时才注意到你的评论。你在第一点中说“不要提交二进制文件”。当时可能有人情绪不好,他们也给克里斯的回答点了个踩(而那是个合理的回答)。 - gbjbaanb

7

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


为什么要点踩呢?至少留个评论解释一下啊,哈哈。如果你认为自己知道答案,也可以回答一下。 - Chris Snowden
1
有一个+1,对我来说有点严厉 - “不要提交用户特定的文件”是很好的建议。 - gbjbaanb
@gbjbaanb。谢谢,你的回答是我所提出的观点的扩展版本,我也同意你的回答。 - Chris Snowden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接