【问题标题】:Linking TFS source control folder from another TFS project从另一个 TFS 项目链接 TFS 源代码控制文件夹
【发布时间】:2015-08-25 10:28:53
【问题描述】:

我们正在迁移到 TFS 2010(从 PVCS)进行源代码控制和工作项跟踪

据我了解,您应该对每个 TFS 项目进行源代码控制,项目解决方案等需要构建的所有内容。

这适用于新的 .NET 解决方案/项目,但我们有大量旧版 Delphi 6 项目,其中包含共享 源代码 库,我们希望将其移植到 TFS 中作为源代码控制和建造。这就是我们管理多个 TFS 项目的方式,这些项目希望在它们之间存储一组特定的源文件,这就是我的问题。

从历史上看,对于 PVCS,我们为每个解决方案(比如 A 和 B)都有项目,以及用于公共源代码的单独项目(比如 C)。用户将获得 C,然后在磁盘上获得 A 或 B(根据需要签出),这可能会像这样:

$\Projects\C
$\Projects\B

但 B 和 C 是单独的 PVCS 档案。

现在,将 TFS 2010 作为我们的 ALM 解决方案,让生活快速发展...

如果我们创建一个 TFS 项目 (1),其中包含公共代码 (C) 的源存储库,那么该项目显然可以访问它(假设 TFS 项目也包含解决方案 A)并且一切都很好。

我们现在创建一个新的 TFS 项目 (2),在其中创建解决方案 B。因为解决方案 B 与解决方案 A 截然不同,我们没有理由共享 TFS 项目 1 的源代码控制,因此我们创建了一个新的源存储库而不是分支从 1. 现在我们发现解决方案 B 需要从 C 访问一些公共文件(在 1 中)。糟糕!

问题是这样的;我可以执行一些源代码管理向导,让我在 2 的源控件中添加一个文件夹,该文件夹是一个(窃取文件系统术语)符号链接到 1 的公共代码 C 的源代码控件中?

编辑
我应该指出这是所有遗留代码,共享源库 (C) 只是共享源,它没有构建到库或其他二进制文件中,我们可以简单地添加到 A 或 B。

【问题讨论】:

    标签: delphi version-control


    【解决方案1】:

    您可能知道,在 TFS 2010 中,他们引入了项目集合 (PC) 的概念。每个项目集合都是团队项目 (TP) 的集合。每台PC都存储在单独的数据库中,而VCS存储在数据库中。

    这意味着每台 PC 有一个 VCS 存储库,而不是 TP。每个 TP 是(默认情况下)每个 VCS 中的根文件夹(即 TP1 将位于 $/Prj1,TP2 可能位于 4/Prj2,等等)

    还有一点是,您不希望每个 TP 有一个解决方案。将 TP 视为一套产品,并将解决方案视为其中的一部分。

    按照 Visual Source Safe 的说法,符号链接不再存在于 TFS 中,我不确定您是否需要它们。在一个解决方案和另一个解决方案的源代码之间创建依赖关系并不是一种好的做法。

    我建议您这样做,让您的代码库中的每个解决方案仅依赖于其自己的代码,依赖于其他解决方案的二进制交付.

    如果 Sln_A 依赖于 Common_Sln,您将构建 Common_Sln,并将其二进制文件从放置位置作为 Get 的一部分。然后,将二进制文件添加为引用。

    这将解决您的问题,另外还有一个好处是将依赖项可能会破坏您的依赖解决方案构建的紧密耦合转换为在它们准备好之前您不会更改或升级依赖项的情况和 em> 你已经准备好迎接他们了。

    这是否有助于解决您的问题?这就是我对所咨询项目的处理方式。

    HTH, 阿萨夫。

    【讨论】:

    • 感谢 Assaf 我错过了作为源容器的 PC。这可能会有所帮助。然而,我正在讨论的代码是遗留的 Delphi 代码,因此这个共享代码不会构建到它自己的二进制文件中,我可以将其添加到其他项目的源代码树中。 叹息
    • 嗨皮特,不要担心遗留代码。如果您使用(并且确实应该)使用 TFSBuild 来构建您的 delphi 代码,您可以从构建的放置文件夹中获取二进制文件。如您所知,使用 TFSBuild 您可以在命令行运行任何命令,而 delphi 有一个命令行编译器。它只需要一个“调用流程”构建活动。这能解决您的问题吗?
    • 使用 TFSBuild 构建我们的 delphi 项目是我的首要工作之一(实际上我们需要 3 个 InvokeProcesses - 一个用于运行 PERL 脚本以从 Delphi IDE 项目文件生成 DCC32.CFG 文件,一个用于进行构建和链接(DCC32.exe)和一个去除不必要的 TD32 调试信息(TDSPACK)的二进制文件)
    • 我认为这里最大的痛点是公共代码目前被用作共享源代码,所以我不能为公共代码采用任何形式的二进制文件并链接到其他项目,他们分享来源。
    • 我开始认为我可能不得不忍受改变所有 140 个遗留应用程序以使用运行时包并从公共代码项目生成它的痛苦,然后我可以将其添加为如果它是其他项目的第三方库。我真的希望通过一个花哨的源代码控制来避免这种情况,将公共项目的已知文件夹/分支链接到其他两个项目的源代码树。
    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2018-03-20
    • 2021-10-18
    • 2019-05-22
    相关资源
    最近更新 更多