希望能够重现使用第三方可视组件包的项目的给定修订版,SVN中的内容以及实现/构建SVN回购的最佳方式是什么?
对于非可视组件,规则似乎很简单,以确保不依赖外部回购 - “没有允许任何外部回购的svn-externals参考”。我有一个我控制的共享仓库,这是唯一允许的'svn-externals'参考。这使得在不同的SVN项目中使用源代码实现和共享这些类型的运行时项目变得容易。任何对这个内部共享仓库的引用都是'svn-externals'使用特定的修订号。
视觉包似乎与能够轻松控制版本相反,因为它们可能必须在每个版本重新安装。如何最好地创建一个能够在以后以特定版本号重新创建的SVN项目...是否有推荐的解决方案?
以前我们并不担心第三方组件,因为它们不经常更改,我们从来没有真正好的解决方案。我想知道其他人是否已经找到解决这个问题的最佳方法,因为我正在进行春季大扫除/内部重组,并希望比以前做得更好。
从技术上讲,RTL / VCL源也应该在SVN仓库中(如果发布了Delphi修补程序/服务包。)
我的解决方案可能是创建一个虚拟机,其中包含安装了所有可视控件的Delphi环境的特定版本。在我们添加/更新可视控件或使用修补程序/服务包更新Delphi时,我们会创建一个新版本的虚拟机。然后,我们将此VM版本的映像存储在某个架子上。这是你做的吗?在这种情况下,Delphi激活/许可是否运行良好(或根本没有)?
谢谢,
达里安
答案 0 :(得分:7)
您可以为项目准备“启动IDE”(可能还有“构建”)脚本,并将其作为项目在存储库中的演变进行维护。
无论您决定将组件保存在单独的存储库中还是使用外部组件,或将它们包含在具有可能分支的单个存储库中,您还应该为每个组件构建和为特定Delphi版本准备的每个分支包含已编译的bpl文件。
你绝对应该尝试保持大多数(如果不是全部)路径相对,在最坏的情况下使用环境变量指向你的根项目目录。
启动IDE脚本允许您在单个Windows安装上保持每个项目和Delphi版本环境的单独配置。
它应该包含项目和Delphi的必要注册表项:
Windows Registry Editor Version 5.00
[-${DelphiRegKey}\Disabled Packages]
[-${DelphiRegKey}\Known Packages]
[-${DelphiRegKey}\Library]
[${DelphiRegKey}\Known Packages]
"$(BDS)\\Bin\\dclstd${CompilerVersion}.bpl"="Borland Standard Components"
"$(BDS)\\Bin\\dclie${CompilerVersion}.bpl"="Internet Explorer Components"
"$(BDS)\\Bin\\dcldb${CompilerVersion}.bpl"="Borland Database Components"
(...)
"${CustomComponentPack}"="Custom Components"
[${DelphiRegKey}\Library]
"Search Path"="${YourLibrarySourceFolder1};${YourLibrarySourceFolder2}"
(...)
然后您可以准备批处理文件:
regedit /s project.reg
%DelphiPath%\bin\bds -rProjectRegKey Project.dpr
${DelphiRegKey}
为HKEY_CURRENT_USER\Software\Borland(or CodeGear in newer versions)\ProjectRegKey
。
基本上,当你从注册表中转储当前的工作配置,从不必要的键中删除它,将路径更改为relative,然后适应它以使它适用于你的项目时,它会更容易。
在这样的配置中,在具有不同组件集(和/或可能使用不同的Delphi版本)的项目及其分支之间进行切换只需要检出存储库并运行脚本。
答案 1 :(得分:3)
幸运的是,我们不必担心修补程序/服务包;我们还在使用Delphi 5.:D
叹息,曾经有一段时间,整个应用程序(设置和所有)都存在于一个目录中 - 这使得这个问题无法解决。但是,世界已经转移,我们将应用程序的各个部分分散在各处:
- 注册表
- 的Windows \系统
- 程序文件
- 有时甚至是“应用程序数据”或“本地设置”中的用户文件夹
考虑修补程序/服务包的影响是完全正确的。不仅RTL / VCL可能会受到影响,而且编译器本身可能会略有改变。另请注意,即使在升级Delphi版本时,也要运行相同的思路,您需要使用正确的版本进行构建。不可否认,这有点容易,因为你可以互相运行不同的Delphi版本。
但是,我会建议你可能不值得付出太多努力。 请注意,使用旧版本始终比使用当前版本更昂贵。
TIP: I would also suggest that the build process automtically copy build output to a different machine, or at least a different hard-drive.
If your build scripts are also kept in source control, this happens implicitly.
Instead of a VM option to keep your old configuration, you can also consider drive-imaging.
It's okay for an automatic build script to fail because the desired configuration isn't available. This will remind you to set it up manually.
我们在这里付出了更多的努力。我们的主要动机之一是我们使用大约8个第三方包。所以做一些事情来标准化它的意义。我们还决定运行8个安装程序是PITA,因此我们设计了一种从源代码控制手动安装所有必需软件包的简便方法。
主要考虑因素
我们创建了以下文件夹结构:
...\ThirdParty\_DesignTimePackages //The actual package files only are copied here
...\ThirdParty\_RunTimePackages //As above, for any packages "required" by those above
...\ThirdParty\Suite1
...\ThirdParty\Suite2
...\ThirdParty\Suite3
因此,配置新环境非常容易:
编辑:Darian担心切换设计包的切换版本时可能会出错。但是,这种方法避免了这些问题。
答案 2 :(得分:2)
我通常在SVN中构建我的存储库,如下所示:
/trunk/app1
/trunk/comp/thirdparty1
/trunk/comp/thirdparty2
/trunk/comp/thirdparty3...
我在根文件夹(trunk)中包含一个包含所有组件的项目组(旧的delphi上的.groupproj或.bpg)。 (allcomponents.groupproj)。
在新机器上安装意味着打开该软件包并安装设计时组件。这对于早于2010年的所有Delphi版本来说都是拖累,但2010和XE有一个很好的功能,所以你可以一目了然地看到哪些组件是设计时组件。
我有时会通过制作build.bat文件和regcomponents.bat文件来省去手动安装这些组件的麻烦。 regcomponents只运行regedit,并在build.bat构建它们之后导入注册所有这些组件所需的密钥,以及其他所有组件。
当你从一个delphi版本升级到另一个版本时,同时拥有一个批处理文件和一个reg文件以及一个组项目可以帮助你。特别是如果你必须经历并大量打开项目/包并将它们保存为MyComponent3.dpk而不是MyComponent2.dpk,或者将包扩展名从150更新为160,或者将包更新。