首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi Visual组件包中使用SVN的最佳实践?

在Delphi Visual组件包中使用SVN的最佳实践?
EN

Stack Overflow用户
提问于 2011-03-25 00:03:59
回答 3查看 1.6K关注 0票数 7

希望能够复制使用第三方可视化组件包的项目的给定版本,SVN中有什么内容,实现/构建SVN repos的最佳方式是什么?

对于非可视化组件,规则似乎很简单,可以确保不依赖外部repos -“不允许svn-外部引用任何外部repo”。我有一个我控制的共享repo,它是唯一允许的“svn-external”引用。这使得在不同的SVN项目中使用share代码实现和共享这些类型的运行时项变得很容易。此内部共享回购的任何引用都是通过使用特定修订号的“svn-external”进行的。

可视化包似乎与能够很容易地进行版本控制是背道而驰的,因为它们可能在每次修订时都必须重新安装。如何最好地创建一个SVN项目,该项目可以在以后的特定版本number...is中重新创建?有一个推荐的解决方案吗?

以前我们不担心第三方组件,因为它们不会经常改变,我们也从来没有一个真正好的解决方案。我想知道其他人是否已经找到了处理这个问题的最好方法,因为我正在进行春季清理/内部重组,并希望比以前做得更好。

从技术上讲,RTL/VCL源代码也应该在SVN代码库中(如果发布了Delphi修补程序/服务包)。

我的解决方案可能是创建一个安装了所有可视化控件的特定版本的Delphi环境的虚拟机。当我们添加/更新可视化控件,或者使用修补程序/服务包更新Delphi时,我们创建了一个新版本的虚拟机。然后,我们将此VM修订版的映像存储在某个架子上。这就是你要做的吗?在这种情况下,Delphi激活/许可是否工作良好(或根本不工作)?

谢谢,

达里安

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-25 03:53:10

您可以为您的项目准备“启动IDE”(可能还有“构建”)脚本,并随着项目在存储库中的发展而维护它们。

无论您是将组件保存在单独的存储库中并使用外部组件,还是将它们包含在单个存储库中并可能有分支,您还应该为每个组件构建和为特定Delphi版本准备的每个分支包含已编译的bpl文件。

你绝对应该尝试保持大多数(如果不是全部)路径是相对的,在最坏的情况下使用环境变量来指向你的根项目目录。

启动IDE脚本允许您在单个Windows安装上保持每个项目和Delphi版本环境的优先配置。

它应该包括您的项目和Delphi所需的注册表项:

代码语言:javascript
复制
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}"
(...)

然后,您可以准备批处理文件:

代码语言:javascript
复制
regedit /s project.reg
%DelphiPath%\bin\bds -rProjectRegKey Project.dpr

其中${DelphiRegKey}HKEY_CURRENT_USER\Software\Borland(or CodeGear in newer versions)\ProjectRegKey

基本上,当您从注册表中转储当前的工作配置,将其从不必要的键中剥离,将路径更改为相对路径,然后进行调整以使其与您的项目一起工作时,这会更容易。

在这样的配置中,在具有不同组件集(和/或可能使用不同Delphi版本)的项目及其分支之间进行切换,只需签出存储库并运行脚本即可。

票数 7
EN

Stack Overflow用户

发布于 2011-03-25 05:31:26

对我们来说幸运的是,我们不必担心热修复/服务包;我们仍然使用Delphi5。

叹息,曾经有一段时间,整个应用程序(设置和所有)将存在于单个目录中-使这不是问题。但是,世界已经向前发展了,我们有一个应用程序的各个部分分散在各地:

  • registry
  • Windows\System
  • Program Files
  • Sometimes甚至是“应用程序数据”或“本地设置”中的用户文件夹

您考虑到修补程序/服务包的影响是非常正确的。不仅RTL/VCL可能会受到影响,编译器本身也可能会稍有变化。还要注意的是,即使在升级Delphi版本时,也需要使用正确的版本进行构建。诚然,这会更容易一些,因为您可以同时运行不同的Delphi版本。

然而,我要建议你,这可能不值得花太多的精力。请记住,在旧版本上工作总是比在当前版本上工作更昂贵。

在理想的情况下,你希望你的所有开发都在主分支代码上,你想最大限度地减少旧版本上的补丁工作。因此,努力让你的大多数用户像possible.

  • Admittedly一样多地使用最新版本这并不总是possible.

  • You不想跳到‘新版本’而没有在任何case.

  • Certain敏捷过程中进行一些测试的倾向于使这变得更容易。

  • 通过使用单独的构建机器或VM,您已经有了对service pack满意的control.

  • TIP: I would also suggest that the build process automtically copy build output to a different machine, or at least a different hard-drive.

  • Once度量,您可以计划何时将其滚动到生成计算机上。

  • 保留生成配置更改的标签的记录非常重要。(就在case.)

  • If your build scripts are also kept in source control, this happens implicitly.

  • When中,你已经推出了修补程序/服务包,对旧版本的修复应该是积极的,当然,它们可能无法消除,但如果它足够罕见,那么即使是手动重新配置也可以保存在VMWare LabManager的$$$上,寻找一个命令行驱动的VM播放器。

  • 你可能需要保留2台“活动”机器/VM,但永远不应该只需要that.

  • 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.

  • Remember,在旧版本上工作总是比在当前版本上工作更昂贵。

第三方包

我们在这里付出了更多的努力。然而,我们的主要动机之一是我们使用了大约8个第三方包。因此,做一些事情来标准化这一点本身是有意义的。我们也认为运行8个安装程序很麻烦,所以我们设计了一种简单的方法来手动安装源代码管理中所有需要的包。

关键注意事项

如果开发人员可以相当容易地确保他们使用相同版本的第三方库进行构建,而necessary.

  • However,开发环境通常必须将包安装到
  • 中,则构建环境不需要安装任何包,如果开发人员可以相当容易地确保使用相同版本的第三方库进行构建,则会有所帮助。这有时会导致源代码出现问题,例如写入到集成开发环境维护的文件中的新属性。
    • ,这当然会将我们带回到第二个point.

  • 由于第三方软件包不经常更新,因此它们被放置在source-control.
  • But,NB的略有不同的区域中,因此仍必须通过相对路径进行引用。

我们创建了以下文件夹结构:

代码语言:javascript
复制
...\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

因此,很容易配置一个新的环境:

  • 获取所有ThirdParty文件的最新版本。
  • 从_DesignTimePackages.
  • Done!

添加_DesignTimePackages和_RunTimePackages到Path

  • Install _DesignTimePackages.
  • Done!
  • all packages

编辑:Darian担心切换设计包版本时出错的可能性。然而,这种方法避免了这类问题。

  • 通过将_DesignTimePackages和_RunTimePackages添加到Windows Path中,
  • 将始终在同一位置找到所需的软件包。因此,您不太可能遇到不兼容的Delphi课程的“软件包噩梦”,如果您做了一些愚蠢的事情,如重新构建一些软件包并签入新版本,则无论您采用哪种方法,都会遇到问题。
票数 3
EN

Stack Overflow用户

发布于 2011-03-25 09:50:09

我在SVN中的存储库结构通常是这样的:

代码语言:javascript
复制
/trunk/app1
/trunk/comp/thirdparty1
/trunk/comp/thirdparty2
/trunk/comp/thirdparty3...

我在根文件夹(主干)中有一个项目组(在旧的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,或者无论你的包做什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5422047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档