我工作的地方有一个 Java 项目。
要在 Mercurial 中创建该项目,我知道我必须为所有类创建一个存储库。
由于有很多类,我想我是否可以拥有一个由存储库副本加上我必须做的修改组成的 jar 副本。
因此,用 Mercurial 术语来说:
- 包含所有类的主存储库
- 一个经过修改和新类的小型存储库
我想从 B 存储库 merge 到 A 存储库。然后我只想提取和更新 B 存储库中存在的类 (*.java)。
我尝试过,但没有成功:
- 为了创建 B 存储库,我克隆了 A 存储库并 我删除了所有文件。
- 当我必须修改 .java 时,我会执行
特定文件的
wget
我本地的 Mercurial 服务器 机器。当文件是新的时我只是 运行 hg add。 - 要进行提交,我会执行
hg commit -I file1 -i file2 ... -i fileN
对于所有 工作中存在的文件 B 存储库的文件夹。
然后是不成功的部分:
- 我无法仅对以下内容进行 hg 更新 现有文件。
- 当 B 存储库 merge 到 A 存储库时
一切都好。但我无法运行 hg
使用
-I
提交 merge 状态 范围。要么全有,要么全无。 - 当我从 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/