将 TFVC 用作完整版本的工件存储库不好吗?

Is it bad to use TFVC as an artifact repository for full releases?

我在一家公司工作,我们将来自大量不同应用程序的构建输出(工件,每个来自不同技术)存储到 TFVC 中,然后从我们的存储库存储到我们的环境服务器。我一直在研究工件存储库,以使我们不再对这些输出使用 TFVC。在收集需求时,有人问我为什么要寻找替代方案。阅读 TFVC 的文档我发现了这个:

You can use Team Foundation Version Control (TFVC) to scale from small to large projects, and by using server workspaces, you can scale up to very large codebases with millions of files per branch and large binary files.

我无法诚实地回答为什么我们应该在 TFVC 上使用工件存储库的问题。它被命名为 Team Foundation Server Version Control,而不是 Source Control。我们的部分要求是版本控制和备份。一旦我们完全自动化,我们将不再需要这些存储库,但是,就目前而言,我们需要某种形式的版本化存储库来存储我们的工件。 所以我的问题是:

当您将构建输出复制到 drop/share 文件夹时。这会将构建输出 存储在版本控制 之外,但存储在 tfs 服务器数据库中。

至于用TFVC存储大量二进制文件(构建输出)不好吗?总的来说,不管好坏,都是根据自己的需要来的。

在 TFS2012 上,您仍然可以将构建输出复制到源代码管理文件夹。所以这绝对是 TFVC 的支持。

一些限制:如果您将构建输出放入源代码管理,这也意味着您用文件(有时是大文件)堵塞了您的版本控制存储库。将文件添加到版本化存储库时,需要大量计算能力来计算版本和增量以及其他需要的东西,但对于放置文件夹,我们不需要这些。

更糟糕的是,当您想要删除旧内容时,您需要调用“destroy”命令以确保您不会让所有这些文件占用 space永远。

也看看这个博客:New un-versioned repository in TFS 2012

除了 space/repository 膨胀问题之外,关键原因是版本控制。如果您为您的二进制文件创建(例如)NuGet 包,您可以安全地为不同的应用程序引用不同的版本,而不必担心在没有针对最新版本的依赖项。例如:

您将 DependencyFoo 转换为 NuGet 包。

应用程序 A 引用版本 1.0。

应用程序 B 引用版本 1.0。

为了支持应用程序 A,您对 DependencyFoo 包进行了一些更改。然后,您可以更新应用程序 A 引用的版本 而完全不影响应用程序 B

除此之外,如果您决定从 TFVC 过渡到 Git,则 Git 不能很好地处理二进制文件,并且当然不应该包含在版本控制中。