这似乎是一个非常基本的问题,但我渴望知道答案。我正在使用Subversion(SVN)进行源代码控制,并且一直在检入所有文件,但客户要求我在SVN中创建一个规则以避免检入bin
和obj
文件夹。
为什么不应该检入bin
和obj
文件夹?
客户还要求我将解决方案文件放在存储库文件夹之外。为什么呢?
这似乎是一个非常基本的问题,但我渴望知道答案。我正在使用Subversion(SVN)进行源代码控制,并且一直在检入所有文件,但客户要求我在SVN中创建一个规则以避免检入bin
和obj
文件夹。
为什么不应该检入bin
和obj
文件夹?
客户还要求我将解决方案文件放在存储库文件夹之外。为什么呢?
不应将任何临时文件添加到SVN,它们是临时的。整个obj目录由在构建过程中创建并随后丢弃的文件组成。(当源文件不改变时,它们像缓存一样被重复使用而保留在磁盘上,但这是它们每次构建后未删除的唯一原因)。
bin目录有些不同。向SVN添加二进制文件是可以的,你可能已经为图标和图像文件这样做了。有些人也会添加构建的二进制文件,这是取决于你的配置管理过程的决定,没有“错误”的答案。然而,有时bin目录可能会填满其他你不想添加的文件。如果你正在构建.net应用程序,你会得到许多依赖dll复制到bin目录中,它们并不严格属于你的项目。添加这些文件只会让你的仓库变得臃肿,没有任何好处。同样,在bin目录中有支持二进制文件,如.pdb调试符号文件。这些实际上也不是必需的。
至于解决方案文件,如果问题不是要加入svn检查,则是因为.sln文件只是一个或多个项目文件的“包装器”。构建Visual Studio项目时它并不是严格必需的,需要时会自动创建一个新的文件。我猜你的用户可能会创建自己的.sln文件,并在其中分组了不同的项目,使每个文件不同于每个用户。这将是防止检入的原因之一,这样每个用户就不会覆盖彼此的自定义文件(虽然有办法让用户防止修改存储在svn中的文件)。
因此,看起来您的配置策略不涉及向svn添加任何二进制文件。如果是这样,那么使用预提交钩子防止意外添加这些文件是一个非常好的主意。我还建议将这些排除项添加到客户端全局忽略列表中,以帮助您的用户从一开始就不要尝试添加这些文件。
你不应该将任何用户特定文件或生成的输出文件进行检入,因为每次检入时都会重新合并重新编译的输出更改。我建议从忽略bin、obj和.suo(而不是.sln)开始作为起点,因为这些将在编译时重新创建,然后忽略任何其他用户特定或每次构建都会重新生成的文件。