2009-02-02 92 views
0

在我工作的Java中有一个项目。Mercurial和Java项目的一种持续集成工作流程

要在Mercurial中进行项目,我知道我必须为所有类创建一个存储库。

由于有很多类,我认为如果也许我可以有一个由版本库副本和我必须做的修改组成的jar副本。

所以在水银条款有:

  1. 主回购与所有类
  2. 痘痘回购进行了修改和新类

我想要做的B回购协议合并回购。然后我想拉和只更新存在于我的B回购中的类(* .java)。

我曾尝试不成功的:

  1. 要创建乙回购协议我克隆一回购和 我删除所有文件。
  2. 当我必须修改.java时,我在我的本地 机器上执行特定文件 mercurial服务器的 wget。当文件是新的时,我只需 运行hg add。
  3. 要做提交我做hg commit -I file1 -i file2 ... -i fileN所有 文件存在工作 文件夹B回购。

然后不成功的一部分:

  1. 我不能只做的 现有文件汞柱更新。
  2. 当B回购合并在回购 这一切都好。但我不能运行hg 提交的合并状态与-I 参数。它的全部或没有。
  3. 当我从回购拉我尝试 更新我有同样的问题4.

我为下手对于B回购,而不是克隆一个不相关的回购意识到hg pull -f。但它具有相同的更新问题。它看起来很丑陋。

我认为transplant plugin它可能有帮助。我也读了这个How to combine two projects in Mercurial?

即使这个历史记录是在B回购中生成的,在回购中保留文件的历史记录也是必须的。

您是否知道实现此目标的最佳方法?

感谢

回答

4

你要寻找的被称为Partial Clone,它不善变的支持。

老实说,你的工作流程听起来很糟糕 - 创建一个子集回购,并试图保持它同步正在对抗这些工具是如何使用的。为什么不建立你需要从全回购的jar,但只包括在蚂蚁(我希望)<jar>标签的特定类。我们有一个有数千个类的存储库,并且输出许多不同的jar,每个jar都是整个类的全部子集。

也就是说,如果你必须坚持你目前的工作流程,你应该修改它。不要复制整个存储库,然后删除不需要的文件,因为您仍然包含完整的历史记录。

取而代之,使用hg convertConvert Extension)使用filemap--filemap选项来构建子集存储库。使用源存储库类型hg和目标类型hg,可以使用filemap仅包含所需的文件。您最终不会得到一个克隆,而是拥有一个全新的存储库,包含所有原始的变更集,但仅限于您指定的文件。使用convert的内置增量模式将使得只能从完整的repo转换新的更改作为一种更新。