我有几个针对不同客户的 ANT 项目;我的项目的目录结构如下所示:
L___standard_workspace
L___.hg
L___validation_commons-sub-proj <- JS Library/Module
| L___java
| | L___jar
| L___old_stuff
| L___src
| | L___css
| | L___js
| | L___validation_commons
| L___src-test
| L___js
L___v_file_attachment-sub-proj <- JS Library/Module
| L___java
| | L___jar
| L___src
| | L___css
| | L___js
| L___src-test
| L___js
L___z_business_logic-sub-proj <- JS Library/Module
| L___java
| | L___jar
| L___src
| L___css
| L___js
L____master-proj <- Master web-deployment module where js libraries are compiled to.
L___docs
L___java
| L___jar
| L___src
| L___AntTasks
| L___build
| | L___classes
| | L___com
| | L___company
| L___dist
| L___nbproject
| | L___private
| L___src
| L___com
| L___company
L___remoteConfig
L___src
| L___css
| | L___blueprint
| | | L___plugins
| | | | L___buttons
| | | | | L___icons
| | | | L___fancy-type
| | | | L___link-icons
| | | | | L___icons
| | | | L___rtl
| | | L___src
| | L___jsmvc
| L___img
| | L___background-shadows
| | L___banners
| | L___menu
| L___js
| | L___approve
| | L___cart
| | L___confirm
| | L___history
| | L___jsmvc
| | L___mixed
| | L___office
| L___stylesheets
| L___swf
L___src-standard
在工作副本中,模块将子项目编译为单个 Javascript 文件,该文件位于主项目的 Javascript 目录中。
例如 ,目录:
validation_commons-sub-proj
v_file_attachment-sub-proj
z_business_logic-sub-proj
...所有内容都在
_master-proj/js
中 merge 并缩小(有点像编译)成不同的 Javascript 文件名目录;最后一步是_master-proj
编译后部署到服务器。现在关于我想用 hg 设置它的方式,我想做的是将主项目及其子项目从他们自己的基线存储库克隆到客户的工作副本中,以便可以将模块添加(使用 hg)到特定客户的工作副本中。
但是,此外,当我确实对一位客户的工作副本中的错误进行了一些更改/修复时,我希望能够选择性地将更改/错误修复推送回主项目/子项目的基线存储库,以达到以下目的最终将更改/修复拉到其他客户的工作副本中,这些副本可能包含需要修复的相同错误。
通过这种方式,我将能够在不同的客户端上使用相同的错误修复。
但是...我不确定使用 hg 和 Eclipse 执行此操作的最佳方法。
我 read here你可以使用 hg 的 Convert Extension使用
--filemap
将子目录拆分为单独的项目选项。但是,对于使用 Convert Extension 是否会更好,我仍然有点困惑。或者最好将每个模块都存放在自己的存储库中,然后将它们 checkout 到每个客户端的单个工作区中。
最佳答案
是的,它看起来像 subrepos是您正在寻找的东西,但我认为这可能是错误问题的正确答案,我强烈怀疑您会遇到类似的 issues that occur when using svn:externals
相反,我建议您将 merge 和缩小的 JS 文件“发布”到 artefact repository。并使用依赖管理器,例如 Ivy将您的人工制品的特定版本拉入您的主项目。这种方法使您可以更好地控制主项目使用的子项目版本。
如果您需要对特定客户端的子项目进行错误修复,您只需在该子项目的主线上进行修复,发布新版本(最好通过 automated build pipeline )并将其主项目更新为使用新版本。哦,你想在发布之前用他们的主项目测试新版本吗?在这种情况下,在您推送修复之前,在本地 merge 和缩小您的子项目,将其发布到 local repository并让客户的主项目选择该版本进行测试。
关于eclipse - Mercurial 和 Eclipse 项目功能子模块的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2851945/