【问题标题】:How do you manage your Delphi Projects with third-party components in Version Control?您如何使用版本控制中的第三方组件管理您的 Delphi 项目?
【发布时间】:2009-02-12 15:53:18
【问题描述】:

安装第三方组件总是需要很长时间,特别是如果您有大型组件,但如果您在多台计算机上设置环境,则需要更多时间。

我正在考虑将它们添加到版本控制 (Subversion) 中,因此检查项目及其所需的所有组件总是很容易。

那么您如何管理它,以及在 VCS 中管理它们的最佳实践是什么?

还要考虑其中一些第三方没有源代码,而是作为 Delphi 库。 (BPL)。

【问题讨论】:

    标签: delphi version-control project-structure


    【解决方案1】:

    如果我们有源代码,那么我们会将它包含在我们的存储库中,在一个单独的文件夹下。

    如果我们没有源代码,那么我们只需将最新的二进制文件(bpl、dll 等)保存在存储库中,并在设置文档中包含安装/使用说明。

    看起来像这样:

    \root
        \third_party_stuff
            \vendor1  --we *do* have the source for this
                \src
                \bin
            \vendor2  --we *do* have the source for this
                \src
                \bin
            \vendor3  --we don't have the source for this one
                \bin
        \our_stuff
            \project1
                \src
                \bin
            \project2
                \src
                \bin
    

    【讨论】:

    • @Joseph,您如何处理来自第三方供应商的不同版本? Project1 可能正在使用 vendor1 的 versionX,而 project2 已经移动到 vendor1 的 versionY。
    • @Lieven:您可以将版本并排放置(像 component_version 这样的目录),也可以为每个项目创建一个库目录(我的首选方法)
    • 如果我们升级到新版本的组件,我们通常将它放在旧目录旁边的新目录中,就像 Rytmis 的第一个建议一样。
    • @Lieven:我们使用“delphi32.exe -rVer2.0”IDE 命令行开关来加载旧程序版本的 Delphi 环境。组件位于该版本的不同目录中(svn 分支)。
    • 我们还有第三个文件夹存放包
    【解决方案2】:

    对于 Subversion,我使用外部功能。它可以很容易地在多个项目中使用第三方的东西;当你签出一个项目时,你也会得到外部依赖项。

    如果您还没有,您应该获得一份使用 Subversion 的实用版本控制的副本。这是一本关于 Subversion 功能和如何做事的好书。虽然它从命令行引用 SVN,但该信息也很容易转换为 TortoiseSVN 中的 GUI。

    为了将旧项目的组件重新安装到 Delphi 中,我通常将使用的任何 Delphi 版本的注册表项导出到项目文件夹中,然后将该 .REG 文件与项目一起检查到 Subversion 中。您可以轻松地签出项目,导出相应版本的 Delphi 的现有 Delphi 注册表部分,从项目源文件夹中导入 .REG 文件,然后在安装所有组件的情况下启动 Delphi。

    至于“二进制 BPL”问题,真丢脸!如果你有依赖第三方工具的项目,你应该为它们购买源代码。这样,您就可以防止该公司倒闭,或放弃对组件的支持,或不兼容的 Delphi 新版本。我总是获取第三方组件的来源;如果源不可用,我会找到不同的产品或自己编写代码。这叫自保。 :-)

    【讨论】:

      【解决方案3】:

      首先,我同意 Ken 和 Fabricio 的观点,即您必须拥有您在项目中使用的所有组件的源代码。其他的都是自找麻烦。

      我们的源代码控制不使用 Subversion,但我猜我们所做的仍然适用......

      我们处理的每个项目都有该项目中使用的所有组件(源)的完整副本。当我们发布时,我们创建一个发布分支,其中包括组件以及项目源。每个项目都包含自己的 BPL 目录。

      我们总是为我们想要处理的每个项目(或项目的分支)创建单独的快捷方式来运行 Delphi,并使用 -R 命令行参数为该项目的 Delphi 设置设置唯一的注册表项.

      然后我们确保在 Delphi 中覆盖 Path 环境变量以指向我们的项目 BPL 目录,而不是正常的 Delphi BPL 目录。

      我们将所有组件的 BPL 和 DCP 输出目录设置为本地项目 BPL 目录。

      这允许我们拥有多个版本的 Delphi,多个版本的项目使用不同版本的组件没有任何问题。

      【讨论】:

        【解决方案4】:

        我同意 Ken White 的观点:delphi 3rd party components' used in production code

        必须有源代码

        期间。仅编译的二进制发行版仅用于评估目的。这是我们的政策。

        至于问题:我实际上并没有将它们放在 VCS 上。实际上,我使用我的项目编译和工作的最新版本。系统、搜索、库等的混乱......路径不值得。 2 同一台机器上的 JVCL 或任何新项目的来回版本? ARRRRGH。

        如果我必须在维护系统中使用旧版本,请删除新 VM 并安装最新版本。有用?行。不是?它会一直保留在 VM 上,直到我找到一种集成到主环境中的方法。

        每件事一个版本就足够了。

        【讨论】:

        • @DavidHeffernan 第三方源代码?不是真的,除非你改变它。你可以保护的是二进制文件/压缩文件/它来的任何包。但是只安装了一个版本。我过去曾尝试过“最佳实践”,但总是带来的悲伤多于其价值
        • 如果您不将其置于版本控制之下,您将无法进行版本控制。你怎么能回到以前的版本?如何维护发布分支?
        • @DavidHeffernan 我将它们视为 Delphi ISO - 每个人都在同一个版本/服务包上。
        • 我觉得你根本不懂我。如果我需要修复旧版本产品中的错误怎么办?那就是维护开发。你想尽可能少地改变。不应盲目升级所有第三方依赖项。
        • @DavidHeffernan 内部开发。没有旧版本。生活轻松了很多。如果必须,该修复仍然可以在隔离的虚拟机下进行 - 主要开发仍然只有一个第 3 方版本。
        【解决方案5】:

        值得一提的是,像LMD 这样的一些公司为订阅了支持的客户提供了对他们自己的SVN 存储库的远程访问。我发现这是快速修复关键问题的好方法。

        【讨论】:

          猜你喜欢
          • 2012-10-06
          • 1970-01-01
          • 2010-09-16
          • 1970-01-01
          • 2010-09-13
          • 2014-04-05
          • 2010-09-06
          • 1970-01-01
          相关资源
          最近更新 更多