java - Mercurial 和 Java 项目的一种持续集成工作流程

标签 java mercurial continuous-integration

我工作的地方有一个 Java 项目。

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

由于有很多类,我想我是否可以拥有一个由存储库副本加上我必须做的修改组成的 jar 副本。

因此,用 Mercurial 术语来说:

  1. 包含所有类的主存储库
  2. 一个经过修改和新类的小型存储库

我想从 B 存储库 merge 到 A 存储库。然后我只想提取和更新 B 存储库中存在的类 (*.java)。

我尝试过,但没有成功:

  1. 为了创建 B 存储库,我克隆了 A 存储库并 我删除了所有文件。
  2. 当我必须修改 .java 时,我会执行 特定文件的 wget 我本地的 Mercurial 服务器 机器。当文件是新的时我只是 运行 hg add。
  3. 要进行提交,我会执行 hg commit -I file1 -i file2 ... -i fileN 对于所有 工作中存在的文件 B 存储库的文件夹。

然后是不成功的部分:

  1. 我无法仅对以下内容进行 hg 更新 现有文件。
  2. 当 B 存储库 merge 到 A 存储库时 一切都好。但我无法运行 hg 使用 -I 提交 merge 状态 范围。要么全有,要么全无。
  3. 当我从 A 存储库中提取数据并尝试 更新我有同样的问题4。

我知道 hg pull -f 从 B 存储库的不相关存储库开始,而不是克隆。但它也有同样的更新问题。而且看起来很丑。

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

保留 A Repo 中的文件历史记录是必须的,即使该历史记录是在 B Repo 中生成的。

您知道实现这一目标的最佳方法吗?

谢谢

最佳答案

您要查找的内容称为 Partial Clone Mercurial 不支持它。

老实说,您的工作流程听起来相当糟糕 - 创建子集存储库并尝试使其保持同步与工具的使用方式相悖。为什么不直接从完整的存储库构建您需要的 jar,而只包含 ant 中的特定类(我希望)<jar>标签。我们有一个包含数千个类的存储库和 build all输出许多不同的 jar,每个 jar 都是整个类的子集。

也就是说,如果您必须坚持当前的工作流程,则应该对其进行修改。不要克隆完整的存储库,然后删除不需要的文件,因为您仍然包含它们的完整历史记录。

相反,请使用 hg convert ( Convert Extension )使用 filemap 构建您的子集存储库和 --filemap选项。使用 hg 的源存储库类型目的地类型为 hg您可以使用文件映射仅包含您想要的文件。您最终得到的不是克隆,而是一个全新的存储库,其中包含所有原始变更集,但仅适用于您指定的文件。使用convert的内置增量模式可以只转换来自完整存储库的新更改,作为一种更新。

关于java - Mercurial 和 Java 项目的一种持续集成工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/502064/

相关文章:

java - 如何检查文本段落是否包含字符串数组中可用的单词?

Java Spring POST API json 输入

java - 在 Java 中比较 TreeMap 键和值

merge - 如何继续 Mercurial merge

git - 在使用 git 时,如何告诉 TeamCity 将 merge 视为单个提交?

java - 设置 SpriteBatch 颜色(用于着色)影响所有绘图

mercurial - 如何在 Mercurial 中克隆存储库的子文件夹?

mercurial - tortoiseHg 工作台 : Select and copy multiple commit descriptions between 2 revisions

jenkins - "A GitHub project url is required"集成 jenkins 和 github 期间

android - 我如何为每个拉取请求托管一个 Android APK 文件,以便 QA 可以在合并之前测试它们?