您是否将bin或debug文件夹(和dll)签入TFS?


11

关于TFS的快速问题-你们是否将bin / debug文件夹签入TFS?(如果是这样,为什么?)由于这些文件夹的内容是动态生成的,因此最好将它们保留在外面,以免程序员遇到只读问题?


您可能对此堆栈交换提案感兴趣。现在几乎可以开始测试版了,只需要更多。
greatwolf 2011年

Answers:


27

通常,源代码管理最好仅用于源代码,而生成的文件不是源文件。

也有例外。有时(使用Visual Studio),您可能希望保留.pdb文件以读取小型转储。有时您无法复制工具链,因此不一定必须准确地重新创建生成的文件。在这些情况下,您主要是对已发布的软件(而不是对每一个VCS更改)执行此操作,并且在任何情况下,这些内容都可以轻松地驻留在版本控制的文件夹中。(无论如何,这些通常都是二进制文件,并且没有从一个版本到另一个版本的可理解的更改,并且不会因为进入VCS而受益匪浅。)


6
如果您对保留调试符号感兴趣,最好设置一个符号服务器。如果操作正确(使用源索引),调试小型转储将首先从符号服务器中提取符号,然后从源代码控制中提取相关的源...如果您仅签入并标记每个内部版本,则必须手动执行此操作。
Shog9 2010年

8

简单的答案?不,不要这样做!我想不出很多理由,但没有理由要这么做。

我唯一能想到的是,您是否可以检查dll是不是来自第三方库,而您并不希望每个开发人员都已安装过该库。但即使如此,它也不位于bin文件夹中。

话虽这么说,我确实在一家公司工作过,要求将每个部署程序包放入源代码管理中,但这是为了使我们可以跟踪提供给客户的各种构建,并且如果需要的话可以轻松回滚。


1
不这样做的主要原因是:您希望源代码控制消耗多少TB的存储空间?
EKW

1
例如,@ EKW C#历史上不会从同一来源生成相同的二进制文件。现在,.NET Core可能有所不同,但这是例如保留生成的二进制文件用于已发布版本的原因之一。我不会将它们放在源代码管理中。这不是完成该任务的正确工具。
Shiv

5

我们不将bin文件夹签入TFS。您可能已经注意到,如果您这样做,那么每当任何开发人员构建解决方案时,他们都会签出bin文件夹。不好。但是,项目需要一些库才能进行编译和运行,我们的规则是任何项目都应能够从源代码控制中打开,并且应进行编译和运行。因此,我们要做的是为项目必须引用的所有DLL创建一个“ BinRef”文件夹,并在BinRef文件夹中创建对副本的“项目引用”。BinRef文件夹签入TFS。

这种方法的另一个优点是BinRef始终位于Web项目的根级别。如果我的项目位于其中,C:\Projects\Marcie\SomeProjectCategory\ProjectA并且创建了对位于其中的DLL C:\DLLsThatILike的引用,则该引用最终看起来像

\..\..\..\NiceThing.dll

。您可以将项目文件保存在C:\ProjectA其中,这意味着对NiceThing的项目引用将在您的计算机上爆炸。希望人们不会以这种方式进行引用,但是我已经看到它发生了。


2

作为更改请求过程的一部分,我们检入bin目录的内容。为避免出现只读问题,我们将内容复制到单独的文件夹中,然后从那里检入。我们的公司政策要求将所有进入生产环境的二进制文件与源文件分开检入。这不是最好的解决方案,但是它可以工作,并且确实为我们提供了生产中的确切文件。


2
起初我要通过这个答案,然后再考虑一下。在我的公司中,我们实际上没有灾难恢复计划(时间太长了)。在必须从头开始的情况下,这可能会很有用。我可以将二进制文件从源代码控制中拉出来,将它们扔到服务器上并完成。
user7676 2010年

@ user7676-您可以按照生产中的版本号重新编译代码。但是要坦白地说,如果您没有灾难恢复计划,并且处在某种灾难之中,那么您的方式会更容易,更快捷。PS。您需要DR计划!!!
阿里2010年

1

我不愿将任何非文本文件签入源代码管理。特别是那些应该由开发人员生成的。我还喜欢将其他二进制文件(例如图像和PDF)压缩并存储在每个标签/发行版的其他位置。


0

不,但是我们内部的项目控制工具会自动执行,这使我烦恼不已。

我的解决方案是将发行和调试中的所有文件标记为可写,并且当TFS抱怨时,我告诉它忽略这些文件,因此我永远不会遇到构建失败的问题。


0

我避免将它们输入源代码管理。它们是冗余信息,二进制文件可以由该修订版中的源代码构建。另外,源代码始终是最新的,可能未提交构建。


0

我保存了一些生成的二进制文件,例如另一个项目中的.NET互操作。因此,如果我有一个创建COM对象的项目A,然后又在一个松散相关的项目B(通过.NET互操作使用它)中使用了该COM对象,则我将从项目A生成的互操作检入到项目B中。这不是一个好主意,但必须走到某个地方,因为AFAIK Visual Studio不会在构建过程中自动为您创建互操作。


-2

我认为,不将二进制文件存储在源代码管理中是最常见的错误之一。它们应与源一起存储,版本化,基线化/标记化,还应与构建工具一起存储。使自己适合构建不可追溯的软件...


5
您已经发表了自己的意见,但没有给我们任何理由说明这是一个好的做法。对这个主题感兴趣的人将不会从此答案中获得很少的价值,而无需更多的支持。
Walter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.