Mercurial和Eclipse项目特性子模块的最佳实践是什么?

7

我有几个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将被合并和缩小(类似于编译),并生成不同的Javascript文件名,存储在_master-proj/js目录中;在最后一步中,_master-proj将被编译以部署到服务器上。
现在,关于我想用hg设置这个的方式,我想能够从它们自己的基线仓库中克隆主项目及其子项目到客户端的工作副本中,以便可以向特定客户的工作副本添加模块(使用hg)。
此外,当我对某个客户的工作副本进行更改/修复错误时,我希望能够选择性地将更改/bug修复推回主项目/子项目的基线存储库,以便最终将更改/修复拉入其他可能包含需要修复的相同错误的客户工作副本中。
通过这种方式,我将能够在不同的客户之间使用相同的错误修复。
然而……我不确定使用hg和Eclipse完成此操作的最佳方法是什么。
我在这里阅读到可以使用hg的Convert Extension使用--filemap选项将子目录拆分为单独的项目。
但是,我仍然有些困惑,是否最好使用Convert Extension或者将每个模块放在自己的存储库中,并将它们检出到每个客户端的单个工作区中。

我正在尝试解释/执行的动词是否有一个简短明了的名称? - leeand00
我认为我对这个问题还有另一个困惑,那就是如何从它们各自的存储库中检出我需要的正确特定模块,而不是将整个东西包含在一个大存储库中? - leeand00
1
我想我可能在这里找到了答案: http://mercurial.selenic.com/wiki/subrepos - leeand00
1个回答

3

看起来你需要使用子仓库,但我认为这可能是错误问题的正确答案,并且我强烈怀疑你会遇到类似于使用svn:externals时出现的问题

相反,我建议你将合并和压缩的JS文件“发布”到工件存储库中,并使用依赖管理器(例如Ivy)将特定版本的工件拉入主项目。这种方法可以让你更好地控制主项目使用的子项目版本。

如果你需要为特定客户端修复子项目中的错误,只需在该子项目的主线上进行修复,发布一个新版本(最好通过自动化构建流水线),然后更新他们的主项目以使用新版本。哦,你想在发布之前测试新版本是否与其主项目兼容吗?在推送修复之前,将子项目在本地合并和压缩,将其发布到本地存储库中,让客户端的主项目使用该版本进行测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接